diff options
Diffstat (limited to 'xmloff/source/chart/contexts.cxx')
-rw-r--r-- | xmloff/source/chart/contexts.cxx | 233 |
1 files changed, 233 insertions, 0 deletions
diff --git a/xmloff/source/chart/contexts.cxx b/xmloff/source/chart/contexts.cxx new file mode 100644 index 000000000000..18dcfa293a3c --- /dev/null +++ b/xmloff/source/chart/contexts.cxx @@ -0,0 +1,233 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_xmloff.hxx" +#include <tools/debug.hxx> +#include <xmloff/xmltoken.hxx> +#include "xmloff/xmlnmspe.hxx" +#include <xmloff/xmlmetai.hxx> +#include <xmloff/xmlstyle.hxx> +#include "SchXMLImport.hxx" +#include "SchXMLCalculationSettingsContext.hxx" + +#include "contexts.hxx" +#include "SchXMLChartContext.hxx" + +using namespace com::sun::star; +using namespace ::xmloff::token; + +// ================================================== + +class SchXMLBodyContext_Impl : public SvXMLImportContext +{ +private: + SchXMLImportHelper& mrImportHelper; + +public: + + SchXMLBodyContext_Impl( SchXMLImportHelper& rImpHelper, + SvXMLImport& rImport, sal_uInt16 nPrfx, + const ::rtl::OUString& rLName ); + virtual ~SchXMLBodyContext_Impl(); + + virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix, + const ::rtl::OUString& rLocalName, + const uno::Reference< xml::sax::XAttributeList > & xAttrList ); +}; + +SchXMLBodyContext_Impl::SchXMLBodyContext_Impl( + SchXMLImportHelper& rImpHelper, SvXMLImport& rImport, + sal_uInt16 nPrfx, const ::rtl::OUString& rLName ) : + SvXMLImportContext( rImport, nPrfx, rLName ), + mrImportHelper( rImpHelper ) +{ +} + +SchXMLBodyContext_Impl::~SchXMLBodyContext_Impl() +{ +} + +SvXMLImportContext *SchXMLBodyContext_Impl::CreateChildContext( + sal_uInt16 nPrefix, + const ::rtl::OUString& rLocalName, + const uno::Reference< xml::sax::XAttributeList > & ) +{ + return new SchXMLBodyContext( mrImportHelper, GetImport(), nPrefix, + rLocalName ); +} + +// ================================================== + +SchXMLDocContext::SchXMLDocContext( SchXMLImportHelper& rImpHelper, + SvXMLImport& rImport, + sal_uInt16 nPrefix, + const rtl::OUString& rLName ) : + SvXMLImportContext( rImport, nPrefix, rLName ), + mrImportHelper( rImpHelper ) +{ + DBG_ASSERT( XML_NAMESPACE_OFFICE == nPrefix && + ( IsXMLToken( rLName, XML_DOCUMENT ) || + IsXMLToken( rLName, XML_DOCUMENT_META) || + IsXMLToken( rLName, XML_DOCUMENT_STYLES) || + IsXMLToken( rLName, XML_DOCUMENT_CONTENT) ), + "SchXMLDocContext instanciated with no <office:document> element" ); +} + +SchXMLDocContext::~SchXMLDocContext() +{} + +TYPEINIT1( SchXMLDocContext, SvXMLImportContext ); + +SvXMLImportContext* SchXMLDocContext::CreateChildContext( + sal_uInt16 nPrefix, + const ::rtl::OUString& rLocalName, + const uno::Reference< xml::sax::XAttributeList >& xAttrList ) +{ + SvXMLImportContext* pContext = 0; + const SvXMLTokenMap& rTokenMap = mrImportHelper.GetDocElemTokenMap(); + sal_uInt16 nFlags = GetImport().getImportFlags(); + + switch( rTokenMap.Get( nPrefix, rLocalName )) + { + case XML_TOK_DOC_AUTOSTYLES: + if( nFlags & IMPORT_AUTOSTYLES ) + // not nice, but this is safe, as the SchXMLDocContext class can only by + // instantiated by the chart import class SchXMLImport (header is not exported) + pContext = + static_cast< SchXMLImport& >( GetImport() ).CreateStylesContext( rLocalName, xAttrList ); + break; + case XML_TOK_DOC_STYLES: + // for draw styles containing gradients/hatches/markers and dashes + if( nFlags & IMPORT_STYLES ) + pContext = new SvXMLStylesContext( GetImport(), nPrefix, rLocalName, xAttrList ); + break; + case XML_TOK_DOC_META: + // we come here in the flat ODF file format, + // if XDocumentPropertiesSupplier is not supported at the model +// DBG_WARNING("XML_TOK_DOC_META: should not have come here, maybe document is invalid?"); + pContext = SvXMLImportContext::CreateChildContext( nPrefix, rLocalName, xAttrList ); + break; + case XML_TOK_DOC_BODY: + if( nFlags & IMPORT_CONTENT ) + pContext = new SchXMLBodyContext_Impl( mrImportHelper, GetImport(), nPrefix, rLocalName ); + break; + } + + // call parent when no own context was created + if( ! pContext ) + pContext = SvXMLImportContext::CreateChildContext( nPrefix, rLocalName, xAttrList ); + + return pContext; +} + +// ================================================== + +SchXMLFlatDocContext_Impl::SchXMLFlatDocContext_Impl( + SchXMLImportHelper& i_rImpHelper, + SchXMLImport& i_rImport, + sal_uInt16 i_nPrefix, const ::rtl::OUString & i_rLName, + const uno::Reference<document::XDocumentProperties>& i_xDocProps, + const uno::Reference<xml::sax::XDocumentHandler>& i_xDocBuilder) : + SvXMLImportContext(i_rImport, i_nPrefix, i_rLName), + SchXMLDocContext(i_rImpHelper, i_rImport, i_nPrefix, i_rLName), + SvXMLMetaDocumentContext(i_rImport, i_nPrefix, i_rLName, + i_xDocProps, i_xDocBuilder) +{ +} + +SchXMLFlatDocContext_Impl::~SchXMLFlatDocContext_Impl() { } + + +SvXMLImportContext *SchXMLFlatDocContext_Impl::CreateChildContext( + sal_uInt16 i_nPrefix, const ::rtl::OUString& i_rLocalName, + const uno::Reference<xml::sax::XAttributeList>& i_xAttrList) +{ + // behave like meta base class iff we encounter office:meta + const SvXMLTokenMap& rTokenMap = + mrImportHelper.GetDocElemTokenMap(); + if ( XML_TOK_DOC_META == rTokenMap.Get( i_nPrefix, i_rLocalName ) ) { + return SvXMLMetaDocumentContext::CreateChildContext( + i_nPrefix, i_rLocalName, i_xAttrList ); + } else { + return SchXMLDocContext::CreateChildContext( + i_nPrefix, i_rLocalName, i_xAttrList ); + } +} + +// ---------------------------------------- + +SchXMLBodyContext::SchXMLBodyContext( SchXMLImportHelper& rImpHelper, + SvXMLImport& rImport, + sal_uInt16 nPrefix, + const rtl::OUString& rLName ) : + SvXMLImportContext( rImport, nPrefix, rLName ), + mrImportHelper( rImpHelper ) +{ + DBG_ASSERT( XML_NAMESPACE_OFFICE == nPrefix && + IsXMLToken( rLName, XML_CHART ), + "SchXMLBodyContext instanciated with no <office:chart> element" ); +} + +SchXMLBodyContext::~SchXMLBodyContext() +{} + +void SchXMLBodyContext::EndElement() +{ +} + +SvXMLImportContext* SchXMLBodyContext::CreateChildContext( + sal_uInt16 nPrefix, + const rtl::OUString& rLocalName, + const uno::Reference< xml::sax::XAttributeList >& xAttrList ) +{ + SvXMLImportContext* pContext = 0; + + // <chart:chart> element + if( nPrefix == XML_NAMESPACE_CHART && + IsXMLToken( rLocalName, XML_CHART ) ) + { + pContext = mrImportHelper.CreateChartContext( GetImport(), + nPrefix, rLocalName, + GetImport().GetModel(), + xAttrList ); + } + else if(nPrefix == XML_NAMESPACE_TABLE && + IsXMLToken( rLocalName, XML_CALCULATION_SETTINGS )) + { + // i99104 handle null date correctly + pContext = new SchXMLCalculationSettingsContext ( GetImport(), nPrefix, rLocalName, xAttrList); + } + else + { + pContext = SvXMLImportContext::CreateChildContext( nPrefix, rLocalName, xAttrList ); + } + + return pContext; +} + + |