summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@collabora.com>2014-06-12 11:24:30 -0400
committerKohei Yoshida <kohei.yoshida@collabora.com>2014-06-12 11:27:19 -0400
commita2a1a59a448420a858724371c4a339f75ebe8c1e (patch)
tree712007fb53468d43a1010e42c71cfd7eaf5976dc
parent10f8d24540a4145af3ec629f7eb724849ca53d22 (diff)
fdo#77506: More reliable way to determine label strings.
Not beautiful, but doable. Change-Id: I6f3b00d620e7d7d19cc05ec4239deeb14d0d5201
-rw-r--r--sc/inc/unonames.hxx2
-rw-r--r--sc/source/ui/unoobj/chart2uno.cxx14
-rw-r--r--xmloff/source/chart/SchXMLExport.cxx41
3 files changed, 39 insertions, 18 deletions
diff --git a/sc/inc/unonames.hxx b/sc/inc/unonames.hxx
index ca7a28c5c3bf..aaead415849b 100644
--- a/sc/inc/unonames.hxx
+++ b/sc/inc/unonames.hxx
@@ -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"
diff --git a/sc/source/ui/unoobj/chart2uno.cxx b/sc/source/ui/unoobj/chart2uno.cxx
index 3da876a99c3a..ed9c2dc8d9e9 100644
--- a/sc/source/ui/unoobj/chart2uno.cxx
+++ b/sc/source/ui/unoobj/chart2uno.cxx
@@ -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
diff --git a/xmloff/source/chart/SchXMLExport.cxx b/xmloff/source/chart/SchXMLExport.cxx
index ab6290336b7b..6189a8b62542 100644
--- a/xmloff/source/chart/SchXMLExport.cxx
+++ b/xmloff/source/chart/SchXMLExport.cxx
@@ -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())
+ {
+ // 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())
{
- // might just be a string
- bool bIsString = isString(aRange);
- if(bIsString)
+ 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 );