[Libreoffice-commits] core.git: Branch 'libreoffice-4-3' - oox/source

Matúš Kukan matus.kukan at collabora.com
Mon Aug 25 04:04:19 PDT 2014


 oox/source/ppt/pptshape.cxx        |   40 +++++++++++++++++++++----------------
 oox/source/ppt/pptshapecontext.cxx |    5 ++--
 2 files changed, 26 insertions(+), 19 deletions(-)

New commits:
commit 092a3a093b11485cb3c951cb36b56ce08218f1e4
Author: Matúš Kukan <matus.kukan at collabora.com>
Date:   Tue Aug 19 16:26:12 2014 +0200

    bnc#880448: Improved handling of placeholder shapes
    
    If subTitle placeholder is not found, try body instead of title.
    And use body text styles instead of title, for subTitle.
    
    Also improve PPTShape::findPlaceholder to find placeholder
    with just nSecondSubType type without the same index.
    
    (cherry picked from commit 2a7119021edea8346e4673d57cac3f051a5d0968)
    
    Conflicts:
    	oox/source/ppt/pptshape.cxx
    
    Change-Id: I470e7268088eb989fb934007dfcf704f67d8cb1d
    Reviewed-on: https://gerrit.libreoffice.org/11065
    Reviewed-by: David Tardon <dtardon at redhat.com>
    Tested-by: David Tardon <dtardon at redhat.com>

diff --git a/oox/source/ppt/pptshape.cxx b/oox/source/ppt/pptshape.cxx
index 70b2d79..ee8b1ab 100644
--- a/oox/source/ppt/pptshape.cxx
+++ b/oox/source/ppt/pptshape.cxx
@@ -90,12 +90,10 @@ oox::drawingml::TextListStylePtr PPTShape::getSubTypeTextListStyle( const SlideP
     {
         case XML_ctrTitle :
         case XML_title :
-        case XML_subTitle :
             pTextListStyle = rSlidePersist.getMasterPersist().get() ? rSlidePersist.getMasterPersist()->getTitleTextStyle() : rSlidePersist.getTitleTextStyle();
             break;
+        case XML_subTitle :
         case XML_obj :
-            pTextListStyle = rSlidePersist.getMasterPersist().get() ? rSlidePersist.getMasterPersist()->getBodyTextStyle() : rSlidePersist.getBodyTextStyle();
-            break;
         case XML_body :
             if ( rSlidePersist.isNotesPage() )
                 pTextListStyle = rSlidePersist.getMasterPersist().get() ? rSlidePersist.getMasterPersist()->getNotesTextStyle() : rSlidePersist.getNotesTextStyle();
@@ -149,7 +147,7 @@ void PPTShape::addShape(
                             sServiceName = OUString();
                         else {
                             sServiceName = "com.sun.star.presentation.SubtitleShape";
-                            aMasterTextListStyle = rSlidePersist.getMasterPersist().get() ? rSlidePersist.getMasterPersist()->getTitleTextStyle() : rSlidePersist.getTitleTextStyle();
+                            aMasterTextListStyle = rSlidePersist.getMasterPersist().get() ? rSlidePersist.getMasterPersist()->getBodyTextStyle() : rSlidePersist.getBodyTextStyle();
                         }
                     }
                     break;
@@ -392,7 +390,8 @@ namespace
 // 1. ph with nFirstSubType and the same oSubTypeIndex
 // 2. ph with nFirstSubType
 // 3. ph with nSecondSubType and the same oSubTypeIndex
-// 4. ph with the same oSubTypeIndex
+// 4. ph with nSecondSubType
+// 5. ph with the same oSubTypeIndex
 oox::drawingml::ShapePtr PPTShape::findPlaceholder( sal_Int32 nFirstSubType, sal_Int32 nSecondSubType,
     const OptValue< sal_Int32 >& oSubTypeIndex, std::vector< oox::drawingml::ShapePtr >& rShapes, bool bMasterOnly )
 {
@@ -400,6 +399,7 @@ oox::drawingml::ShapePtr PPTShape::findPlaceholder( sal_Int32 nFirstSubType, sal
     oox::drawingml::ShapePtr aChoiceShapePtr1;
     oox::drawingml::ShapePtr aChoiceShapePtr2;
     oox::drawingml::ShapePtr aChoiceShapePtr3;
+    oox::drawingml::ShapePtr aChoiceShapePtr4;
     std::vector< oox::drawingml::ShapePtr >::reverse_iterator aRevIter( rShapes.rbegin() );
     while (aRevIter != rShapes.rend())
     {
@@ -414,27 +414,31 @@ oox::drawingml::ShapePtr PPTShape::findPlaceholder( sal_Int32 nFirstSubType, sal
                 }
                 else if ((*aRevIter)->getSubType() == nSecondSubType && !aChoiceShapePtr2.get())
                     aChoiceShapePtr2 = *aRevIter;
-                else if (!aChoiceShapePtr3.get())
-                    aChoiceShapePtr3 = *aRevIter;
+                else if (!aChoiceShapePtr4.get())
+                    aChoiceShapePtr4 = *aRevIter;
             }
             else if ((*aRevIter)->getSubType() == nFirstSubType && !aChoiceShapePtr1.get())
                 aChoiceShapePtr1 = *aRevIter;
+            else if ((*aRevIter)->getSubType() == nSecondSubType && !aChoiceShapePtr3.get())
+                aChoiceShapePtr3 = *aRevIter;
         }
         std::vector< oox::drawingml::ShapePtr >& rChildren = (*aRevIter)->getChildren();
-        aChoiceShapePtr3 = findPlaceholder( nFirstSubType, nSecondSubType, oSubTypeIndex, rChildren, bMasterOnly );
-        if (aChoiceShapePtr3.get())
+        aChoiceShapePtr4 = findPlaceholder( nFirstSubType, nSecondSubType, oSubTypeIndex, rChildren, bMasterOnly );
+        if (aChoiceShapePtr4.get())
         {
-            if (aChoiceShapePtr3->getSubType() == nFirstSubType)
+            if (aChoiceShapePtr4->getSubType() == nFirstSubType)
             {
-                if (aChoiceShapePtr3->getSubTypeIndex() == oSubTypeIndex)
-                    aShapePtr = aChoiceShapePtr3;
+                if (aChoiceShapePtr4->getSubTypeIndex() == oSubTypeIndex)
+                    aShapePtr = aChoiceShapePtr4;
                 else
-                    aChoiceShapePtr1 = aChoiceShapePtr3;
+                    aChoiceShapePtr1 = aChoiceShapePtr4;
             }
-            else if (aChoiceShapePtr3->getSubType() == nSecondSubType &&
-                    aChoiceShapePtr3->getSubTypeIndex() == oSubTypeIndex)
+            else if (aChoiceShapePtr4->getSubType() == nSecondSubType)
             {
-                aChoiceShapePtr2 = aChoiceShapePtr3;
+                if (aChoiceShapePtr4->getSubTypeIndex() == oSubTypeIndex)
+                    aChoiceShapePtr2 = aChoiceShapePtr4;
+                else
+                    aChoiceShapePtr3 = aChoiceShapePtr4;
             }
         }
         if (aShapePtr.get())
@@ -447,7 +451,9 @@ oox::drawingml::ShapePtr PPTShape::findPlaceholder( sal_Int32 nFirstSubType, sal
         return aChoiceShapePtr1;
     if (aChoiceShapePtr2.get())
         return aChoiceShapePtr2;
-    return aChoiceShapePtr3;
+    if (aChoiceShapePtr3.get())
+        return aChoiceShapePtr3;
+    return aChoiceShapePtr4;
 }
 
 oox::drawingml::ShapePtr PPTShape::findPlaceholderByIndex( const sal_Int32 nIdx, std::vector< oox::drawingml::ShapePtr >& rShapes, bool bMasterOnly )
diff --git a/oox/source/ppt/pptshapecontext.cxx b/oox/source/ppt/pptshapecontext.cxx
index 8a2e3ff..e254201 100644
--- a/oox/source/ppt/pptshapecontext.cxx
+++ b/oox/source/ppt/pptshapecontext.cxx
@@ -96,7 +96,7 @@ ContextHandlerRef PPTShapeContext::onCreateContext( sal_Int32 aElementToken, con
 
                               case XML_subTitle :       // slide/layout
                                   nFirstPlaceholder = XML_subTitle;
-                                  nSecondPlaceholder = XML_title;
+                                  nSecondPlaceholder = XML_body;
                               break;
 
                              case XML_obj :         // slide/layout
@@ -140,7 +140,8 @@ ContextHandlerRef PPTShapeContext::onCreateContext( sal_Int32 aElementToken, con
                               }
                               if ( pPlaceholder.get() )
                               {
-                                  OSL_TRACE("shape %s will get shape reference %s applied", OUStringToOString(mpShapePtr->getId(), RTL_TEXTENCODING_UTF8 ).getStr(), OUStringToOString(pPlaceholder->getId(), RTL_TEXTENCODING_UTF8 ).getStr());
+                                  SAL_INFO("oox.ppt","shape " << mpShapePtr->getId() <<
+                                          " will get shape reference " << pPlaceholder->getId() << " applied");
                                   mpShapePtr->applyShapeReference( *pPlaceholder.get() );
                                   PPTShape* pPPTShape = dynamic_cast< PPTShape* >( pPlaceholder.get() );
                                   if ( pPPTShape )


More information about the Libreoffice-commits mailing list