diff options
-rw-r--r-- | chart2/source/inc/InternalDataProvider.hxx | 8 | ||||
-rw-r--r-- | chart2/source/tools/InternalDataProvider.cxx | 200 | ||||
-rw-r--r-- | dbaccess/source/core/inc/DatabaseDataProvider.hxx | 6 | ||||
-rw-r--r-- | dbaccess/source/core/misc/DatabaseDataProvider.cxx | 8 | ||||
-rw-r--r-- | include/oox/drawingml/chart/chartconverter.hxx | 8 | ||||
-rw-r--r-- | offapi/com/sun/star/chart2/data/XDataProvider.idl | 3 | ||||
-rw-r--r-- | oox/source/drawingml/chart/chartconverter.cxx | 6 | ||||
-rw-r--r-- | oox/source/drawingml/chart/datasourceconverter.cxx | 4 | ||||
-rw-r--r-- | oox/source/drawingml/chart/seriesconverter.cxx | 2 | ||||
-rw-r--r-- | sc/inc/chart2uno.hxx | 4 | ||||
-rw-r--r-- | sc/source/filter/inc/excelchartconverter.hxx | 8 | ||||
-rw-r--r-- | sc/source/filter/oox/excelchartconverter.cxx | 3 | ||||
-rw-r--r-- | sc/source/ui/unoobj/chart2uno.cxx | 8 | ||||
-rw-r--r-- | sw/inc/unochart.hxx | 5 | ||||
-rw-r--r-- | sw/source/core/unocore/unochart.cxx | 8 |
15 files changed, 209 insertions, 72 deletions
diff --git a/chart2/source/inc/InternalDataProvider.hxx b/chart2/source/inc/InternalDataProvider.hxx index 526ca2d04fd5..459ffb8adb85 100644 --- a/chart2/source/inc/InternalDataProvider.hxx +++ b/chart2/source/inc/InternalDataProvider.hxx @@ -134,6 +134,11 @@ public: const OUString& aRangeRepresentation ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; + + virtual css::uno::Reference<css::chart2::data::XDataSequence> SAL_CALL + createDataSequenceByValueArray( const OUString& aRole, const OUString& aRangeRepresentation ) + throw (css::lang::IllegalArgumentException, css::uno::RuntimeException, std::exception) SAL_OVERRIDE; + virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XRangeSelection > SAL_CALL getRangeSelection() throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; @@ -230,6 +235,9 @@ private: ::com::sun::star::chart2::data::XDataSequence > createDataSequenceAndAddToMap( const OUString & rRangeRepresentation ); + css::uno::Reference<css::chart2::data::XDataSequence> + createDataSequenceFromArray( const OUString& rArrayStr, const OUString& rRole ); + void deleteMapReferences( const OUString & rRangeRepresentation ); void adaptMapReferences( diff --git a/chart2/source/tools/InternalDataProvider.cxx b/chart2/source/tools/InternalDataProvider.cxx index 20886fa97c4f..ee2dcfe9a5e4 100644 --- a/chart2/source/tools/InternalDataProvider.cxx +++ b/chart2/source/tools/InternalDataProvider.cxx @@ -491,79 +491,155 @@ void InternalDataProvider::decreaseMapReferences( Reference< chart2::data::XDataSequence > InternalDataProvider::createDataSequenceAndAddToMap( const OUString & rRangeRepresentation ) { - OUString aRangeRepresentation = rRangeRepresentation; - if( aRangeRepresentation.indexOf('{') >= 0 ) - { - ::std::vector< double > aNewData; - ::std::vector< uno::Any > aNewLabels; - OUString aToken; - sal_Int32 nCategories = 0; - sal_Int32 nIndex = 0; - bool bValues = true; - bool bLabelSet = false; - OUString str = aRangeRepresentation.replace('{',' ').replace('}',' '); - - m_aInternalData.clearDefaultData(); - sal_Int32 n = m_aInternalData.getColumnCount(); - if( n ) - n = n - 1; - - do + Reference<chart2::data::XDataSequence> xSeq = createDataSequenceFromArray(rRangeRepresentation, OUString()); + if (xSeq.is()) + return xSeq; + + xSeq.set(new UncachedDataSequence(this, rRangeRepresentation)); + addDataSequenceToMap(rRangeRepresentation, xSeq); + return xSeq; +} + +uno::Reference<chart2::data::XDataSequence> +InternalDataProvider::createDataSequenceFromArray( const OUString& rArrayStr, const OUString& rRole ) +{ + if (rArrayStr.indexOf('{') != 0 || rArrayStr[rArrayStr.getLength()-1] != '}') + { + // Not an array string. + return uno::Reference<chart2::data::XDataSequence>(); + } + + bool bAllNumeric = true; + uno::Reference<chart2::data::XDataSequence> xSeq; + + const sal_Unicode* p = rArrayStr.getStr(); + const sal_Unicode* pEnd = p + rArrayStr.getLength(); + const sal_Unicode* pElem = NULL; + OUString aElem; + + std::vector<OUString> aRawElems; + ++p; // Skip the first '{'. + --pEnd; // Skip the last '}'. + bool bInQuote = false; + for (; p != pEnd; ++p) + { + if (*p == '"') { - // TODO: This will be problematic if ';' is used in label names - // '"' character also needs to be considered in such cases - aToken = str.getToken(0,';',nIndex); - if( aToken.isEmpty() ) - break; - if( aToken.indexOf('"') < 0 ) + bInQuote = !bInQuote; + if (bInQuote) { - aNewData.push_back( aToken.toDouble() ); + // Opening quote. + bAllNumeric = false; + ++p; + if (p == pEnd) + break; + pElem = p; } else { - aNewLabels.push_back( uno::makeAny(aToken.replace('"', ' ').trim()) ); - if( !nCategories && - ( !m_aInternalData.getComplexColumnLabel(n).size() || - !m_aInternalData.getComplexColumnLabel(n).front().hasValue() ) ) - { - m_aInternalData.setComplexColumnLabel( n, aNewLabels ); - bLabelSet = true; - } - else - { - m_aInternalData.setComplexRowLabel(nCategories, aNewLabels); - if(nCategories==1 && bLabelSet) - { - ::std::vector< uno::Any > aLabels; - m_aInternalData.setComplexRowLabel( 0, m_aInternalData.getComplexColumnLabel( n ) ); - m_aInternalData.setComplexColumnLabel( n, aLabels ); - } - } - aNewLabels.pop_back(); - nCategories++; - bValues = false; + // Closing quote. + if (pElem) + aElem = OUString(pElem, p-pElem); + aRawElems.push_back(aElem); + pElem = NULL; + aElem = OUString(); + + ++p; // Skip '"'. + if (p == pEnd) + break; } - } while( nIndex >= 0 ); - - if( bValues ) + } + else if (bInQuote) + { + // Do nothing. + } + else if (*p == ';') { - m_aInternalData.insertColumn( n ); - m_aInternalData.setColumnValues( n, aNewData ); - aRangeRepresentation = OUString::number( n ); + // element separator. + if (pElem) + aElem = OUString(pElem, p-pElem); + aRawElems.push_back(aElem); + pElem = NULL; + aElem = OUString(); } - else if( nCategories > 1 ) + else if (!pElem) + pElem = p; + } + + if (pElem) + { + aElem = OUString(pElem, p-pElem); + aRawElems.push_back(aElem); + } + + if (rRole == "values-y" || rRole == "values-first" || rRole == "values-last" || + rRole == "values-min" || rRole == "values-max") + { + // Column values. Append a new data column and populate it. + + std::vector<double> aValues; + aValues.reserve(aRawElems.size()); + for (size_t i = 0; i < aRawElems.size(); ++i) + aValues.push_back(aRawElems[i].toDouble()); + sal_Int32 n = m_aInternalData.appendColumn(); + + m_aInternalData.setColumnValues(n, aValues); + + OUString aRangeRep = OUString::number(n); + xSeq.set(new UncachedDataSequence(this, aRangeRep)); + addDataSequenceToMap(aRangeRep, xSeq); + } + else if (rRole == "values-x") + { + std::vector<double> aValues; + aValues.reserve(aRawElems.size()); + if (bAllNumeric) { - aRangeRepresentation = lcl_aCategoriesRangeName; + for (size_t i = 0; i < aRawElems.size(); ++i) + aValues.push_back(aRawElems[i].toDouble()); } else { - aRangeRepresentation = lcl_aLabelRangePrefix+OUString::number( n ); + for (size_t i = 0; i < aRawElems.size(); ++i) + aValues.push_back(i+1); + } + + sal_Int32 n = m_aInternalData.appendColumn(); + m_aInternalData.setColumnValues(n, aValues); + + OUString aRangeRep = OUString::number(n); + xSeq.set(new UncachedDataSequence(this, aRangeRep)); + addDataSequenceToMap(aRangeRep, xSeq); + } + else if (rRole == "categories") + { + // Category labels. + + for (size_t i = 0; i < aRawElems.size(); ++i) + { + std::vector<uno::Any> aLabels(1, uno::makeAny(aRawElems[i])); + m_aInternalData.setComplexRowLabel(i, aLabels); + } + + xSeq.set(new UncachedDataSequence(this, lcl_aCategoriesRangeName)); + addDataSequenceToMap(lcl_aCategoriesRangeName, xSeq); + } + else if (rRole == "label") + { + // Data series label. There should be only one element. This always + // goes to the last data column. + sal_Int32 nColSize = m_aInternalData.getColumnCount(); + if (!aRawElems.empty() && nColSize) + { + std::vector<uno::Any> aLabels(1, uno::makeAny(aRawElems[0])); + m_aInternalData.setComplexColumnLabel(nColSize-1, aLabels); + + OUString aRangeRep = lcl_aLabelRangePrefix + OUString::number(nColSize-1); + xSeq.set(new UncachedDataSequence(this, aRangeRep)); + addDataSequenceToMap(aRangeRep, xSeq); } } - Reference< chart2::data::XDataSequence > xSeq( - new UncachedDataSequence( this, aRangeRepresentation )); - addDataSequenceToMap( aRangeRepresentation, xSeq ); return xSeq; } @@ -764,6 +840,14 @@ Reference< chart2::data::XDataSequence > SAL_CALL InternalDataProvider::createDa return Reference< chart2::data::XDataSequence >(); } +Reference<chart2::data::XDataSequence> SAL_CALL +InternalDataProvider::createDataSequenceByValueArray( + const OUString& aRole, const OUString& aRangeRepresentation ) + throw (lang::IllegalArgumentException, uno::RuntimeException, std::exception) +{ + return createDataSequenceFromArray(aRangeRepresentation, aRole); +} + Reference< sheet::XRangeSelection > SAL_CALL InternalDataProvider::getRangeSelection() throw (uno::RuntimeException, std::exception) { diff --git a/dbaccess/source/core/inc/DatabaseDataProvider.hxx b/dbaccess/source/core/inc/DatabaseDataProvider.hxx index 20c954e74ac0..665cebe4baf4 100644 --- a/dbaccess/source/core/inc/DatabaseDataProvider.hxx +++ b/dbaccess/source/core/inc/DatabaseDataProvider.hxx @@ -81,6 +81,12 @@ private: virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > SAL_CALL detectArguments(const ::com::sun::star::uno::Reference< ::com::sun::star::chart2::data::XDataSource > & xDataSource) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual sal_Bool SAL_CALL createDataSequenceByRangeRepresentationPossible(const OUString & aRangeRepresentation) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual ::com::sun::star::uno::Reference< ::com::sun::star::chart2::data::XDataSequence > SAL_CALL createDataSequenceByRangeRepresentation(const OUString & aRangeRepresentation) throw (::com::sun::star::uno::RuntimeException, ::com::sun::star::lang::IllegalArgumentException, std::exception) SAL_OVERRIDE; + + virtual css::uno::Reference<css::chart2::data::XDataSequence> SAL_CALL + createDataSequenceByValueArray( + const OUString& aRole, const OUString & aRangeRepresentation) + throw (css::uno::RuntimeException, css::lang::IllegalArgumentException, std::exception) SAL_OVERRIDE; + virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XRangeSelection > SAL_CALL getRangeSelection() throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; // ::com::sun::star::chart2::data::XRangeXMLConversion: diff --git a/dbaccess/source/core/misc/DatabaseDataProvider.cxx b/dbaccess/source/core/misc/DatabaseDataProvider.cxx index 11d08cf3121e..19e800ce1840 100644 --- a/dbaccess/source/core/misc/DatabaseDataProvider.cxx +++ b/dbaccess/source/core/misc/DatabaseDataProvider.cxx @@ -301,6 +301,14 @@ uno::Reference< chart2::data::XDataSequence > SAL_CALL DatabaseDataProvider::cre return xData; } +uno::Reference<chart2::data::XDataSequence> +SAL_CALL DatabaseDataProvider::createDataSequenceByValueArray( + const OUString& /*aRole*/, const OUString& /*aRangeRepresentation*/ ) + throw (uno::RuntimeException, lang::IllegalArgumentException, std::exception) +{ + return uno::Reference<chart2::data::XDataSequence>(); +} + uno::Sequence< uno::Sequence< OUString > > SAL_CALL DatabaseDataProvider::getComplexRowDescriptions() throw (uno::RuntimeException, std::exception) { return m_xComplexDescriptionAccess->getComplexRowDescriptions(); diff --git a/include/oox/drawingml/chart/chartconverter.hxx b/include/oox/drawingml/chart/chartconverter.hxx index 4807655bd25e..bbfe0ed4290f 100644 --- a/include/oox/drawingml/chart/chartconverter.hxx +++ b/include/oox/drawingml/chart/chartconverter.hxx @@ -83,10 +83,10 @@ public: /** Creates a data sequence from a formula. Dummy implementation. Derived classes have to override this function to actually parse the formula. */ - virtual ::com::sun::star::uno::Reference< ::com::sun::star::chart2::data::XDataSequence > - createDataSequence( - const ::com::sun::star::uno::Reference< ::com::sun::star::chart2::data::XDataProvider >& rxDataProvider, - const DataSequenceModel& rDataSeq ); + virtual css::uno::Reference<css::chart2::data::XDataSequence> + createDataSequence( + const css::uno::Reference<css::chart2::data::XDataProvider>& rxDataProvider, + const DataSequenceModel& rDataSeq, const OUString& rRole ); private: ChartConverter( const ChartConverter& ); diff --git a/offapi/com/sun/star/chart2/data/XDataProvider.idl b/offapi/com/sun/star/chart2/data/XDataProvider.idl index 3ed73e2c4062..6ab3fd4aaadd 100644 --- a/offapi/com/sun/star/chart2/data/XDataProvider.idl +++ b/offapi/com/sun/star/chart2/data/XDataProvider.idl @@ -126,6 +126,9 @@ interface XDataProvider : ::com::sun::star::uno::XInterface [in] string aRangeRepresentation ) raises( com::sun::star::lang::IllegalArgumentException ); + XDataSequence createDataSequenceByValueArray( [in] string aRole, [in] string aValueArray ) + raises( com::sun::star::lang::IllegalArgumentException ); + /** Returns a component that is able to change a given range representation to another one. This usually is a controller-component that uses the GUI to allow a user to diff --git a/oox/source/drawingml/chart/chartconverter.cxx b/oox/source/drawingml/chart/chartconverter.cxx index 2d198f007324..bfa9d5ca6fb4 100644 --- a/oox/source/drawingml/chart/chartconverter.cxx +++ b/oox/source/drawingml/chart/chartconverter.cxx @@ -114,7 +114,9 @@ void ChartConverter::createDataProvider( const Reference< XChartDocument >& rxCh } } -Reference< XDataSequence > ChartConverter::createDataSequence( const Reference< XDataProvider >& rxDataProvider, const DataSequenceModel& rDataSeq ) +Reference< XDataSequence > ChartConverter::createDataSequence( + const Reference< XDataProvider >& rxDataProvider, const DataSequenceModel& rDataSeq, + const OUString& rRole ) { Reference< XDataSequence > xDataSeq; if( rxDataProvider.is() ) @@ -134,7 +136,7 @@ Reference< XDataSequence > ChartConverter::createDataSequence( const Reference< if( !aRangeRep.isEmpty() ) try { // create the data sequence - xDataSeq = rxDataProvider->createDataSequenceByRangeRepresentation( aRangeRep ); + xDataSeq = rxDataProvider->createDataSequenceByValueArray(rRole, aRangeRep); return xDataSeq; } catch( Exception& ) diff --git a/oox/source/drawingml/chart/datasourceconverter.cxx b/oox/source/drawingml/chart/datasourceconverter.cxx index 96a20383a1a3..8b1725f4dea5 100644 --- a/oox/source/drawingml/chart/datasourceconverter.cxx +++ b/oox/source/drawingml/chart/datasourceconverter.cxx @@ -74,9 +74,9 @@ Reference< XDataSequence > DataSequenceConverter::createDataSequence( const OUSt mrModel.maData.insert(std::make_pair<sal_Int32, Any>(1, Any(aTitle.makeStringAndClear()))); } } - xDataSeq = getChartConverter()->createDataSequence( getChartDocument()->getDataProvider(), mrModel ); + xDataSeq = getChartConverter()->createDataSequence(getChartDocument()->getDataProvider(), mrModel, rRole); - // set sequen ce role + // set sequence role PropertySet aSeqProp( xDataSeq ); aSeqProp.setProperty( PROP_Role, rRole ); } diff --git a/oox/source/drawingml/chart/seriesconverter.cxx b/oox/source/drawingml/chart/seriesconverter.cxx index 9f6737dd72d7..23899675497c 100644 --- a/oox/source/drawingml/chart/seriesconverter.cxx +++ b/oox/source/drawingml/chart/seriesconverter.cxx @@ -513,7 +513,7 @@ SeriesConverter::~SeriesConverter() Reference< XLabeledDataSequence > SeriesConverter::createCategorySequence( const OUString& rRole ) { - return createLabeledDataSequence( SeriesModel::CATEGORIES, rRole, false ); + return createLabeledDataSequence(SeriesModel::CATEGORIES, rRole, false); } Reference< XLabeledDataSequence > SeriesConverter::createValueSequence( const OUString& rRole ) diff --git a/sc/inc/chart2uno.hxx b/sc/inc/chart2uno.hxx index cb386f3cac7f..ab0b7baff280 100644 --- a/sc/inc/chart2uno.hxx +++ b/sc/inc/chart2uno.hxx @@ -97,6 +97,10 @@ public: const OUString& aRangeRepresentation ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; + virtual css::uno::Reference<css::chart2::data::XDataSequence> SAL_CALL + createDataSequenceByValueArray( const OUString& aRole, const OUString& aRangeRepresentation ) + throw (css::lang::IllegalArgumentException, css::uno::RuntimeException, std::exception) SAL_OVERRIDE; + virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XRangeSelection > SAL_CALL getRangeSelection() throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; diff --git a/sc/source/filter/inc/excelchartconverter.hxx b/sc/source/filter/inc/excelchartconverter.hxx index 383c1d561dc3..c4afd77e6953 100644 --- a/sc/source/filter/inc/excelchartconverter.hxx +++ b/sc/source/filter/inc/excelchartconverter.hxx @@ -37,10 +37,10 @@ public: const ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XChartDocument >& rxChartDoc ) SAL_OVERRIDE; /** Creates a data sequence from the passed formula. */ - virtual ::com::sun::star::uno::Reference< ::com::sun::star::chart2::data::XDataSequence > - createDataSequence( - const ::com::sun::star::uno::Reference< ::com::sun::star::chart2::data::XDataProvider >& rxDataProvider, - const ::oox::drawingml::chart::DataSequenceModel& rDataSeq ) SAL_OVERRIDE; + virtual css::uno::Reference<css::chart2::data::XDataSequence> + createDataSequence( + const css::uno::Reference<css::chart2::data::XDataProvider>& rxDataProvider, + const oox::drawingml::chart::DataSequenceModel& rDataSeq, const OUString& rRole ) SAL_OVERRIDE; }; } // namespace xls diff --git a/sc/source/filter/oox/excelchartconverter.cxx b/sc/source/filter/oox/excelchartconverter.cxx index fe2293402ba8..24fe4a286e60 100644 --- a/sc/source/filter/oox/excelchartconverter.cxx +++ b/sc/source/filter/oox/excelchartconverter.cxx @@ -64,7 +64,8 @@ void ExcelChartConverter::createDataProvider( const Reference< XChartDocument >& } Reference< XDataSequence > ExcelChartConverter::createDataSequence( - const Reference< XDataProvider >& rxDataProvider, const DataSequenceModel& rDataSeq ) + const Reference< XDataProvider >& rxDataProvider, const DataSequenceModel& rDataSeq, + const OUString& /*rRole*/ ) { Reference< XDataSequence > xDataSeq; if (!rxDataProvider.is()) diff --git a/sc/source/ui/unoobj/chart2uno.cxx b/sc/source/ui/unoobj/chart2uno.cxx index 41a18192d53c..55d4c542d091 100644 --- a/sc/source/ui/unoobj/chart2uno.cxx +++ b/sc/source/ui/unoobj/chart2uno.cxx @@ -2098,6 +2098,14 @@ uno::Reference< chart2::data::XDataSequence > SAL_CALL return xResult; } +uno::Reference<chart2::data::XDataSequence> SAL_CALL +ScChart2DataProvider::createDataSequenceByValueArray( + const OUString& /*aRole*/, const OUString& /*aRangeRepresentation*/ ) + throw (css::lang::IllegalArgumentException, css::uno::RuntimeException, std::exception) +{ + return uno::Reference<chart2::data::XDataSequence>(); +} + uno::Reference< sheet::XRangeSelection > SAL_CALL ScChart2DataProvider::getRangeSelection() throw (uno::RuntimeException, std::exception) { diff --git a/sw/inc/unochart.hxx b/sw/inc/unochart.hxx index be1a674a39a8..a3689555468d 100644 --- a/sw/inc/unochart.hxx +++ b/sw/inc/unochart.hxx @@ -172,6 +172,11 @@ public: virtual ::com::sun::star::uno::Reference< ::com::sun::star::chart2::data::XDataSequence > SAL_CALL createDataSequenceByRangeRepresentation( const OUString& aRangeRepresentation ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; virtual ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XRangeSelection > SAL_CALL getRangeSelection( ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE; + virtual css::uno::Reference<css::chart2::data::XDataSequence> + SAL_CALL createDataSequenceByValueArray( + const OUString& aRole, const OUString& aRangeRepresentation ) + throw (css::lang::IllegalArgumentException, css::uno::RuntimeException, std::exception) SAL_OVERRIDE; + // XRangeXMLConversion virtual OUString SAL_CALL convertRangeToXML( const OUString& aRangeRepresentation ) throw (::com::sun::star::lang::IllegalArgumentException, diff --git a/sw/source/core/unocore/unochart.cxx b/sw/source/core/unocore/unochart.cxx index af47cb7928b0..0a34baf37207 100644 --- a/sw/source/core/unocore/unochart.cxx +++ b/sw/source/core/unocore/unochart.cxx @@ -1432,6 +1432,14 @@ uno::Reference< sheet::XRangeSelection > SAL_CALL SwChartDataProvider::getRangeS return uno::Reference< sheet::XRangeSelection >(); } +uno::Reference<css::chart2::data::XDataSequence> SAL_CALL + SwChartDataProvider::createDataSequenceByValueArray( + const OUString& /*aRole*/, const OUString& /*aRangeRepresentation*/ ) + throw (lang::IllegalArgumentException, uno::RuntimeException, std::exception) +{ + return uno::Reference<css::chart2::data::XDataSequence>(); +} + void SAL_CALL SwChartDataProvider::dispose( ) throw (uno::RuntimeException, std::exception) { |