summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@gmail.com>2013-01-23 22:18:05 -0500
committerKohei Yoshida <kohei.yoshida@gmail.com>2013-01-23 22:23:02 -0500
commit043e30baedb42dbc8799003ea2ae7987a97871ca (patch)
tree1236516133e08a5704cbcbc1fffddafb8989be49
parentb1d0fd4f969976e2133f8eaa37c1fb8360c20f68 (diff)
fdo#58562: Ensure internal data is always used when pasting to another doc.
Without this, pasting a chart object from one Calc doc to another may occasionally incorrectly switch to range references *if* the destination document contains the "right" set of sheet names. With this fix, pasted chart objects always switch to internal cached data source when pasting to another document, while retaining range references when pasting within the same document. Change-Id: If1dbc854c5faae62f06ece155fad470b229ca0c7
-rw-r--r--sc/inc/unonames.hxx1
-rw-r--r--sc/source/ui/unoobj/chart2uno.cxx8
-rw-r--r--xmloff/source/chart/SchXMLTools.cxx30
3 files changed, 33 insertions, 6 deletions
diff --git a/sc/inc/unonames.hxx b/sc/inc/unonames.hxx
index ca89837fafbd..9ab18568fe14 100644
--- a/sc/inc/unonames.hxx
+++ b/sc/inc/unonames.hxx
@@ -652,6 +652,7 @@
#define SC_UNONAME_HIDDENVALUES "HiddenValues"
#define SC_UNONAME_INCLUDEHIDDENCELLS "IncludeHiddenCells"
#define SC_UNONAME_HIDDENVALUES "HiddenValues"
+#define SC_UNONAME_USE_INTERNAL_DATA_PROVIDER "UseInternalDataProvider"
// Solver
#define SC_UNONAME_TIMEOUT "Timeout"
diff --git a/sc/source/ui/unoobj/chart2uno.cxx b/sc/source/ui/unoobj/chart2uno.cxx
index 5c2dc073949c..cd94ab9474e1 100644
--- a/sc/source/ui/unoobj/chart2uno.cxx
+++ b/sc/source/ui/unoobj/chart2uno.cxx
@@ -77,7 +77,8 @@ const SfxItemPropertyMapEntry* lcl_GetDataProviderPropertyMap()
{
static SfxItemPropertyMapEntry aDataProviderPropertyMap_Impl[] =
{
- {MAP_CHAR_LEN(SC_UNONAME_INCLUDEHIDDENCELLS), 0, &getBooleanCppuType(), 0, 0 },
+ { MAP_CHAR_LEN(SC_UNONAME_INCLUDEHIDDENCELLS), 0, &getBooleanCppuType(), 0, 0 },
+ { MAP_CHAR_LEN(SC_UNONAME_USE_INTERNAL_DATA_PROVIDER), 0, &getBooleanCppuType(), 0, 0 },
{0,0,0,0,0,0}
};
return aDataProviderPropertyMap_Impl;
@@ -2326,6 +2327,11 @@ uno::Any SAL_CALL ScChart2DataProvider::getPropertyValue(
uno::Any aRet;
if ( rPropertyName == SC_UNONAME_INCLUDEHIDDENCELLS )
aRet <<= m_bIncludeHiddenCells;
+ else if (rPropertyName == SC_UNONAME_USE_INTERNAL_DATA_PROVIDER)
+ {
+ // This is a read-only property.
+ aRet <<= static_cast<sal_Bool>(m_pDocument->PastingDrawFromOtherDoc());
+ }
else
throw beans::UnknownPropertyException();
return aRet;
diff --git a/xmloff/source/chart/SchXMLTools.cxx b/xmloff/source/chart/SchXMLTools.cxx
index db3a7f8290eb..2e469a4659f1 100644
--- a/xmloff/source/chart/SchXMLTools.cxx
+++ b/xmloff/source/chart/SchXMLTools.cxx
@@ -377,14 +377,34 @@ Reference< chart2::data::XDataSequence > CreateDataSequence(
return xRet;
}
- try
+ bool bUseInternal = false;
+ uno::Reference<beans::XPropertySet> xPropSet(xDataProvider, uno::UNO_QUERY);
+ if (xPropSet.is())
{
- xRet.set( xDataProvider->createDataSequenceByRangeRepresentation( lcl_ConvertRange( rRange, xDataProvider )));
- SchXMLTools::setXMLRangePropertyAtDataSequence( xRet, rRange );
+ try
+ {
+ sal_Bool bVal;
+ uno::Any any = xPropSet->getPropertyValue("UseInternalDataProvider");
+ if (any >>= bVal)
+ bUseInternal = static_cast<bool>(bVal);
+ }
+ catch (const beans::UnknownPropertyException&)
+ {
+ // Do nothing
+ }
}
- catch( const lang::IllegalArgumentException & )
+
+ if (!bUseInternal)
{
- OSL_FAIL( "could not create data sequence" );
+ try
+ {
+ xRet.set( xDataProvider->createDataSequenceByRangeRepresentation( lcl_ConvertRange( rRange, xDataProvider )));
+ SchXMLTools::setXMLRangePropertyAtDataSequence( xRet, rRange );
+ }
+ catch( const lang::IllegalArgumentException & )
+ {
+ OSL_FAIL( "could not create data sequence" );
+ }
}
if( !xRet.is() && !xChartDoc->hasInternalDataProvider() && !rRange.isEmpty() )