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 @@ ...@@ -654,6 +654,8 @@
#define SC_UNONAME_INCLUDEHIDDENCELLS "IncludeHiddenCells" #define SC_UNONAME_INCLUDEHIDDENCELLS "IncludeHiddenCells"
#define SC_UNONAME_HIDDENVALUES "HiddenValues" #define SC_UNONAME_HIDDENVALUES "HiddenValues"
#define SC_UNONAME_USE_INTERNAL_DATA_PROVIDER "UseInternalDataProvider" #define SC_UNONAME_USE_INTERNAL_DATA_PROVIDER "UseInternalDataProvider"
#define SC_UNONAME_HAS_STRING_LABEL "HasStringLabel"
#define SC_UNONAME_TIME_BASED "TimeBased"
// Solver // Solver
#define SC_UNONAME_TIMEOUT "Timeout" #define SC_UNONAME_TIMEOUT "Timeout"
......
...@@ -3526,10 +3526,22 @@ uno::Any SAL_CALL ScChart2DataSequence::getPropertyValue(const OUString& rProper ...@@ -3526,10 +3526,22 @@ uno::Any SAL_CALL ScChart2DataSequence::getPropertyValue(const OUString& rProper
BuildDataCache(); BuildDataCache();
aRet <<= m_aHiddenValues; aRet <<= m_aHiddenValues;
} }
else if (rPropertyName == "TimeBased") else if (rPropertyName == SC_UNONAME_TIME_BASED)
{ {
aRet <<= mbTimeBased; 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 else
throw beans::UnknownPropertyException(); throw beans::UnknownPropertyException();
// TODO: support optional properties // TODO: support optional properties
......
...@@ -2565,7 +2565,6 @@ void SchXMLExportHelper_Impl::exportSeries( ...@@ -2565,7 +2565,6 @@ void SchXMLExportHelper_Impl::exportSeries(
OUString aFirstXDomainRange; OUString aFirstXDomainRange;
OUString aFirstYDomainRange; OUString aFirstYDomainRange;
bool modifyLabelRange = false;
std::vector< XMLPropertyState > aPropertyStates; std::vector< XMLPropertyState > aPropertyStates;
...@@ -2711,28 +2710,36 @@ void SchXMLExportHelper_Impl::exportSeries( ...@@ -2711,28 +2710,36 @@ void SchXMLExportHelper_Impl::exportSeries(
// #i75297# allow empty series, export empty range to have all ranges on import // #i75297# allow empty series, export empty range to have all ranges on import
mrExport.AddAttribute( XML_NAMESPACE_CHART, XML_VALUES_CELL_RANGE_ADDRESS, OUString()); mrExport.AddAttribute( XML_NAMESPACE_CHART, XML_VALUES_CELL_RANGE_ADDRESS, OUString());
if( xLabelSeq.is()) { if (xLabelSeq.is())
OUString aRange = xLabelSeq->getSourceRangeRepresentation(); {
if ( nSeriesIdx == 0 && aRange.equalsAscii("label 1")) // Check if the label is direct string value rather than a reference.
modifyLabelRange = true; bool bHasString = false;
if (modifyLabelRange) uno::Reference<beans::XPropertySet> xLSProp(xLabelSeq, uno::UNO_QUERY);
aRange = "label " + OUString::number(aRange.copy( OUString("label").getLength()).toInt32() - 1); if (xLSProp.is())
OUString aXMLRange = lcl_ConvertRange( aRange, xNewDoc );
if(aXMLRange.isEmpty() && !aRange.isEmpty())
{ {
// might just be a string try
bool bIsString = isString(aRange);
if(bIsString)
{ {
mrExport.AddAttribute( XML_NAMESPACE_LO_EXT, xLSProp->getPropertyValue("HasStringLabel") >>= bHasString;
XML_LABEL_STRING, aRange );
} }
catch (const beans::UnknownPropertyException&) {}
}
OUString aRange = xLabelSeq->getSourceRangeRepresentation();
if (bHasString)
{
mrExport.AddAttribute(
XML_NAMESPACE_LO_EXT, XML_LABEL_STRING, aRange);
} }
else 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() ) if( xLabelSeq.is() || xValuesSeq.is() )
aSeriesLabelValuesPair = tLabelValuesDataPair( xLabelSeq, xValuesSeq ); 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