[Libreoffice-commits] core.git: include/oox oox/Library_oox.mk oox/source

Matúš Kukan matus.kukan at collabora.com
Mon Jul 7 08:50:09 PDT 2014


 include/oox/drawingml/ThemeOverrideFragmentHandler.hxx |   40 ++++++++++++++
 include/oox/ppt/pptimport.hxx                          |    1 
 oox/Library_oox.mk                                     |    1 
 oox/source/drawingml/ThemeOverrideFragmentHandler.cxx  |   48 +++++++++++++++++
 oox/source/drawingml/shape.cxx                         |   20 ++++++-
 5 files changed, 109 insertions(+), 1 deletion(-)

New commits:
commit 08818d8a45e034ad825c7fafbb76766f106f1d1d
Author: Matúš Kukan <matus.kukan at collabora.com>
Date:   Fri Jul 4 15:12:59 2014 +0200

    bnc#882383: Do not ignore themeOverride for charts in .pptx
    
    Otherwise wrong colors are displayed.
    
    Change-Id: I5d7444100355fdbc5fcd2aaa1c01202ace54312d

diff --git a/include/oox/drawingml/ThemeOverrideFragmentHandler.hxx b/include/oox/drawingml/ThemeOverrideFragmentHandler.hxx
new file mode 100644
index 0000000..827cf5a
--- /dev/null
+++ b/include/oox/drawingml/ThemeOverrideFragmentHandler.hxx
@@ -0,0 +1,40 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_OOX_DRAWINGML_THEMEOVERRICEFRAGMENTHANDLER_HXX
+#define INCLUDED_OOX_DRAWINGML_THEMEOVERRICEFRAGMENTHANDLER_HXX
+
+#include <oox/core/fragmenthandler2.hxx>
+
+namespace oox {
+namespace drawingml {
+
+class Theme;
+
+class ThemeOverrideFragmentHandler : public ::oox::core::FragmentHandler2
+{
+public:
+    explicit            ThemeOverrideFragmentHandler(
+                            ::oox::core::XmlFilterBase& rFilter,
+                            const OUString& rFragmentPath,
+                            Theme& rTheme );
+    virtual             ~ThemeOverrideFragmentHandler();
+
+    virtual ::oox::core::ContextHandlerRef onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs ) SAL_OVERRIDE;
+
+private:
+    Theme&              mrTheme;
+};
+
+} // namespace drawingml
+} // namespace oox
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/oox/ppt/pptimport.hxx b/include/oox/ppt/pptimport.hxx
index c393be6..d304792 100644
--- a/include/oox/ppt/pptimport.hxx
+++ b/include/oox/ppt/pptimport.hxx
@@ -50,6 +50,7 @@ public:
     virtual const oox::drawingml::table::TableStyleListPtr getTableStyles() SAL_OVERRIDE;
     virtual ::oox::drawingml::chart::ChartConverter* getChartConverter() SAL_OVERRIDE;
 
+    SlidePersistPtr                                         getActualSlidePersist() const { return mpActualSlidePersist; };
     void                                                    setActualSlidePersist( SlidePersistPtr pActualSlidePersist ){ mpActualSlidePersist = pActualSlidePersist; };
     std::map< OUString, oox::drawingml::ThemePtr >&    getThemes(){ return maThemes; };
     std::vector< SlidePersistPtr >&                         getDrawPages(){ return maDrawPages; };
diff --git a/oox/Library_oox.mk b/oox/Library_oox.mk
index 4f4a35b..f356565 100644
--- a/oox/Library_oox.mk
+++ b/oox/Library_oox.mk
@@ -197,6 +197,7 @@ $(eval $(call gb_Library_add_exception_objects,oox,\
     oox/source/drawingml/theme \
     oox/source/drawingml/themeelementscontext \
     oox/source/drawingml/themefragmenthandler \
+    oox/source/drawingml/ThemeOverrideFragmentHandler \
     oox/source/drawingml/transform2dcontext \
     oox/source/dump/dffdumper \
     oox/source/dump/dumperbase \
diff --git a/oox/source/drawingml/ThemeOverrideFragmentHandler.cxx b/oox/source/drawingml/ThemeOverrideFragmentHandler.cxx
new file mode 100644
index 0000000..5f3e7fc
--- /dev/null
+++ b/oox/source/drawingml/ThemeOverrideFragmentHandler.cxx
@@ -0,0 +1,48 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include "oox/drawingml/ThemeOverrideFragmentHandler.hxx"
+#include "oox/drawingml/theme.hxx"
+#include "oox/drawingml/themeelementscontext.hxx"
+
+using namespace ::oox::core;
+
+namespace oox {
+namespace drawingml {
+
+ThemeOverrideFragmentHandler::ThemeOverrideFragmentHandler( XmlFilterBase& rFilter, const OUString& rFragmentPath, Theme& rTheme ) :
+    FragmentHandler2( rFilter, rFragmentPath ),
+    mrTheme( rTheme )
+{
+}
+
+ThemeOverrideFragmentHandler::~ThemeOverrideFragmentHandler()
+{
+}
+
+ContextHandlerRef ThemeOverrideFragmentHandler::onCreateContext( sal_Int32 nElement, const AttributeList& )
+{
+    // CT_OfficeStyleSheet
+    switch( getCurrentElement() )
+    {
+        case XML_ROOT_CONTEXT:
+            switch( nElement )
+            {
+                case A_TOKEN( themeOverride ): // CT_BaseStylesOverride
+                    return new ThemeElementsContext( *this, mrTheme );
+            }
+        break;
+    }
+    return 0;
+}
+
+} // namespace drawingml
+} // namespace oox
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx
index cc8acde..af4acd1 100644
--- a/oox/source/drawingml/shape.cxx
+++ b/oox/source/drawingml/shape.cxx
@@ -25,10 +25,12 @@
 #include "effectproperties.hxx"
 #include "oox/drawingml/shapepropertymap.hxx"
 #include "oox/drawingml/textbody.hxx"
+#include "oox/drawingml/ThemeOverrideFragmentHandler.hxx"
 #include "drawingml/table/tableproperties.hxx"
 #include "oox/drawingml/chart/chartconverter.hxx"
 #include "drawingml/chart/chartspacefragment.hxx"
 #include "drawingml/chart/chartspacemodel.hxx"
+#include "oox/ppt/pptimport.hxx"
 #include "oox/vml/vmldrawing.hxx"
 #include "oox/vml/vmlshape.hxx"
 #include "oox/vml/vmlshapecontainer.hxx"
@@ -47,6 +49,7 @@
 #include <com/sun/star/beans/XMultiPropertySet.hpp>
 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
 #include <com/sun/star/xml/AttributeData.hpp>
+#include <com/sun/star/xml/sax/XFastSAXSerializable.hpp>
 #include <com/sun/star/drawing/HomogenMatrix3.hpp>
 #include <com/sun/star/drawing/TextVerticalAdjust.hpp>
 #include <com/sun/star/drawing/GraphicExportFilter.hpp>
@@ -1231,7 +1234,22 @@ void Shape::finalizeXShape( XmlFilterBase& rFilter, const Reference< XShapes >&
 
                 // load the chart data from the XML fragment
                 chart::ChartSpaceModel aModel;
-                rFilter.importFragment( new chart::ChartSpaceFragment( rFilter, mxChartShapeInfo->maFragmentPath, aModel ) );
+                chart::ChartSpaceFragment *pChartSpaceFragment = new chart::ChartSpaceFragment(
+                        rFilter, mxChartShapeInfo->maFragmentPath, aModel );
+                const OUString aThemeOverrideFragmentPath( pChartSpaceFragment->
+                        getFragmentPathFromFirstTypeFromOfficeDoc("themeOverride") );
+                rFilter.importFragment( pChartSpaceFragment );
+                ::oox::ppt::PowerPointImport *pPowerPointImport =
+                    dynamic_cast< ::oox::ppt::PowerPointImport* >(&rFilter);
+                if (!aThemeOverrideFragmentPath.isEmpty() && pPowerPointImport)
+                {
+                    uno::Reference< xml::sax::XFastSAXSerializable > xDoc(
+                            rFilter.importFragment(aThemeOverrideFragmentPath), uno::UNO_QUERY_THROW);
+                    ThemePtr pTheme = pPowerPointImport->getActualSlidePersist()->getTheme();
+                    rFilter.importFragment(new ThemeOverrideFragmentHandler(
+                                rFilter, aThemeOverrideFragmentPath, *pTheme), xDoc);
+                    pPowerPointImport->getActualSlidePersist()->setTheme(pTheme);
+                }
 
                 // convert imported chart model to chart document
                 Reference< drawing::XShapes > xExternalPage;


More information about the Libreoffice-commits mailing list