34 #include <com/sun/star/chart/XChartDocument.hpp>
35 #include <com/sun/star/container/XChild.hpp>
36 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
37 #include <com/sun/star/uno/XComponentContext.hpp>
38 #include <com/sun/star/chart2/data/XDataReceiver.hpp>
39 #include <com/sun/star/chart2/XChartDocument.hpp>
40 #include <com/sun/star/chart2/XCoordinateSystemContainer.hpp>
41 #include <com/sun/star/chart2/XChartTypeContainer.hpp>
42 #include <com/sun/star/chart2/XDataSeriesContainer.hpp>
44 #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
51 using ::com::sun::star::uno::Reference;
52 using ::com::sun::star::uno::Sequence;
56 class lcl_MatchesChartType
59 explicit lcl_MatchesChartType(
const OUString & aChartTypeName ) :
60 m_aChartTypeName( aChartTypeName )
63 bool operator () (
const Reference< chart2::XChartType > & xChartType )
const
65 return (xChartType.is() &&
66 xChartType->getChartType() == m_aChartTypeName );
70 OUString m_aChartTypeName;
82 mpAutoStyles( nullptr )
92 Reference< chart::XChartDocument > xDoc( rChartModel, uno::UNO_QUERY );
100 SAL_WARN(
"xmloff.chart",
"No valid XChartDocument given as XModel" );
117 pPropStyle->FillPropertySet(rProp);
126 const Reference< chart2::XDataSeries > & xSeries,
127 const Reference< chart2::XChartDocument > & xDoc )
133 Reference< chart2::XCoordinateSystemContainer > xCooSysCnt(
134 xDoc->getFirstDiagram(), uno::UNO_QUERY_THROW );
135 const Sequence< Reference< chart2::XCoordinateSystem > > aCooSysSeq(
136 xCooSysCnt->getCoordinateSystems());
138 for(
const auto& rCooSys : aCooSysSeq )
140 Reference< chart2::XChartTypeContainer > xCTCnt( rCooSys, uno::UNO_QUERY_THROW );
141 const Sequence< Reference< chart2::XChartType > > aChartTypes( xCTCnt->getChartTypes());
143 for(
const auto& rChartType : aChartTypes )
145 Reference< chart2::XDataSeriesContainer > xSeriesCnt( rChartType, uno::UNO_QUERY_THROW );
146 const Sequence< Reference< chart2::XDataSeries > > aSeriesSeq( xSeriesCnt->getDataSeries());
148 if (std::find(aSeriesSeq.begin(), aSeriesSeq.end(), xSeries) != aSeriesSeq.end())
150 xSeriesCnt->removeDataSeries(xSeries);
156 catch(
const uno::Exception &)
164 const Reference< chart2::XChartDocument > & xDoc,
165 sal_Int32 nCoordinateSystemIndex,
166 const OUString & rChartTypeName,
167 bool bPushLastChartType )
169 Reference< chart2::XDataSeries > xResult;
175 Reference< chart2::XCoordinateSystemContainer > xCooSysCnt(
176 xDoc->getFirstDiagram(), uno::UNO_QUERY_THROW );
177 Sequence< Reference< chart2::XCoordinateSystem > > aCooSysSeq(
178 xCooSysCnt->getCoordinateSystems());
182 if( nCoordinateSystemIndex < aCooSysSeq.getLength())
184 Reference< chart2::XChartType > xCurrentType;
186 Reference< chart2::XChartTypeContainer > xCTCnt( aCooSysSeq[ nCoordinateSystemIndex ], uno::UNO_QUERY_THROW );
187 Sequence< Reference< chart2::XChartType > > aChartTypes( xCTCnt->getChartTypes());
189 const Reference< chart2::XChartType > * pBegin = aChartTypes.getConstArray();
190 const Reference< chart2::XChartType > * pEnd = pBegin + aChartTypes.getLength();
191 const Reference< chart2::XChartType > * pIt =
192 ::std::find_if( pBegin, pEnd, lcl_MatchesChartType( rChartTypeName ));
194 xCurrentType.set( *pIt );
197 if( !xCurrentType.is())
200 xContext->getServiceManager()->createInstanceWithContext( rChartTypeName, xContext ),
202 if( xCurrentType.is())
204 if( bPushLastChartType && aChartTypes.hasElements())
206 sal_Int32
nIndex( aChartTypes.getLength() - 1 );
207 aChartTypes.realloc( aChartTypes.getLength() + 1 );
208 auto pChartTypes = aChartTypes.getArray();
210 pChartTypes[
nIndex ] = xCurrentType;
211 xCTCnt->setChartTypes( aChartTypes );
214 xCTCnt->addChartType( xCurrentType );
219 if( xCurrentType.is())
221 Reference< chart2::XDataSeriesContainer > xSeriesCnt( xCurrentType, uno::UNO_QUERY_THROW );
226 xContext->getServiceManager()->createInstanceWithContext(
227 "com.sun.star.chart2.DataSeries",
228 xContext ), uno::UNO_QUERY_THROW );
231 xSeriesCnt->addDataSeries( xResult );
235 catch(
const uno::Exception & )
245 SvXMLImport( xContext, implementationName, nImportFlags ),
254 uno::Reference< chart2::XChartDocument > xChartDoc(
GetModel(), uno::UNO_QUERY );
255 if( xChartDoc.is() && xChartDoc->hasControllersLocked() )
256 xChartDoc->unlockControllers();
262 const uno::Reference< xml::sax::XFastAttributeList >& )
271 uno::Reference<document::XDocumentPropertiesSupplier> xDPS(
279 xDPS->getDocumentProperties());
308 uno::Reference<chart2::XChartDocument> xOldDoc(
GetModel(), uno::UNO_QUERY);
309 if (xOldDoc.is() && xOldDoc->hasControllersLocked())
310 xOldDoc->unlockControllers();
314 uno::Reference<chart2::XChartDocument> xChartDoc(
GetModel(), uno::UNO_QUERY);
322 xChartDoc->lockControllers();
324 uno::Reference<container::XChild> xChild(xChartDoc, uno::UNO_QUERY);
325 uno::Reference<chart2::data::XDataReceiver> xDataReceiver(xChartDoc, uno::UNO_QUERY);
326 if (xChild.is() && xDataReceiver.is())
328 Reference<lang::XMultiServiceFactory> xFact(xChild->getParent(), uno::UNO_QUERY);
332 Reference<util::XNumberFormatsSupplier> xNumberFormatsSupplier(xFact, uno::UNO_QUERY);
333 xDataReceiver->attachNumberFormatsSupplier(xNumberFormatsSupplier);
337 catch (
const uno::Exception &)
345 extern "C" SAL_DLLPUBLIC_EXPORT uno::XInterface*
347 uno::Sequence<uno::Any>
const& )
354 extern "C" SAL_DLLPUBLIC_EXPORT uno::XInterface*
356 uno::XComponentContext* pCtx, uno::Sequence<uno::Any>
const& )
361 extern "C" SAL_DLLPUBLIC_EXPORT uno::XInterface*
363 uno::XComponentContext* pCtx, uno::Sequence<uno::Any>
const& )
368 extern "C" SAL_DLLPUBLIC_EXPORT uno::XInterface*
370 uno::XComponentContext* pCtx, uno::Sequence<uno::Any>
const& )
372 return cppu::acquire(
new SchXMLImport(pCtx,
"SchXMLImport.Content",
SvXMLImportContext * CreateStylesContext()
SvXMLStylesContext * GetAutoStylesContext() const
SAL_DLLPUBLIC_EXPORT uno::XInterface * com_sun_star_comp_Chart_XMLOasisMetaImporter_get_implementation(uno::XComponentContext *pCtx, uno::Sequence< uno::Any > const &)
constexpr sal_uInt16 XML_NAMESPACE_XLINK
SvXMLNamespaceMap & GetNamespaceMap()
SAL_DLLPUBLIC_EXPORT uno::XInterface * com_sun_star_comp_Chart_XMLOasisContentImporter_get_implementation(uno::XComponentContext *pCtx, uno::Sequence< uno::Any > const &)
void FillAutoStyle(const OUString &rAutoStyleName, const css::uno::Reference< css::beans::XPropertySet > &rProp)
Fill in the autostyle.
static void DeleteDataSeries(const css::uno::Reference< css::chart2::XDataSeries > &xSeries, const css::uno::Reference< css::chart2::XChartDocument > &xDoc)
SvXMLImportContext * CreateChartContext(SvXMLImport &rImport, const css::uno::Reference< css::frame::XModel > &rChartModel)
get the context for reading the element with subelements.
SchXMLImport(const css::uno::Reference< css::uno::XComponentContext > &xContext, OUString const &implementationName, SvXMLImportFlags nImportFlags)
#define DBG_UNHANDLED_EXCEPTION(...)
virtual SvXMLImportContext * CreateFastContext(sal_Int32 nElement, const ::css::uno::Reference<::css::xml::sax::XFastAttributeList > &xAttrList) override
static css::uno::Reference< css::chart2::XDataSeries > GetNewDataSeries(const css::uno::Reference< css::chart2::XChartDocument > &xDoc, sal_Int32 nCoordinateSystemIndex, const OUString &rChartTypeName, bool bPushLastChartType)
constexpr sal_uInt16 XML_NAMESPACE_CHART_EXT
virtual ~SchXMLImport() noexcept override
static XmlStyleFamily GetChartFamilyID()
With this class you can import a
element containing its data as element o...
This class deliberately does not support XWeak, to improve performance when loading large documents...
#define TOOLS_INFO_EXCEPTION(area, stream)
virtual void SAL_CALL setTargetDocument(const css::uno::Reference< css::lang::XComponent > &xDoc) override
rtl::Reference< SchXMLImportHelper > maImportHelper
const OUString & GetXMLToken(enum XMLTokenEnum eToken)
return the OUString representation for eToken
Handling of tokens in XML:
#define XML_ELEMENT(prefix, name)
sal_uInt16 Add(const OUString &rPrefix, const OUString &rName, sal_uInt16 nKey=XML_NAMESPACE_UNKNOWN)
const css::uno::Reference< css::frame::XModel > & GetModel() const
Reference< XComponentContext > getProcessComponentContext()
void SetAutoStyles(SvXMLStylesContext *pAutoStyles)
const SvXMLStyleContext * FindStyleChildContext(XmlStyleFamily nFamily, const OUString &rName, bool bCreateIndex=false) const
const css::uno::Reference< css::beans::XPropertySet > & getImportInfo() const
handles the top-level office:document-meta element of meta.xml documents
SAL_DLLPUBLIC_EXPORT uno::XInterface * com_sun_star_comp_Chart_XMLOasisImporter_get_implementation(uno::XComponentContext *pCtx, uno::Sequence< uno::Any > const &)
#define SAL_WARN(area, stream)
virtual void SAL_CALL setTargetDocument(const css::uno::Reference< css::lang::XComponent > &xDoc) override
css::uno::Reference< css::chart::XChartDocument > mxChartDoc
SAL_DLLPUBLIC_EXPORT uno::XInterface * com_sun_star_comp_Chart_XMLOasisStylesImporter_get_implementation(uno::XComponentContext *pCtx, uno::Sequence< uno::Any > const &)