[Libreoffice-commits] .: Branch 'distro/suse/suse-3.6' - 3 commits - oox/inc oox/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Sat Oct 13 00:56:25 PDT 2012


 oox/inc/oox/drawingml/textbodyproperties.hxx       |    3 +
 oox/source/drawingml/shape.cxx                     |    3 +
 oox/source/drawingml/textbodyproperties.cxx        |   22 +++++++++++++
 oox/source/drawingml/textbodypropertiescontext.cxx |   25 +++------------
 oox/source/ppt/pptshape.cxx                        |    4 ++
 oox/source/ppt/pptshapecontext.cxx                 |   17 +++++++---
 oox/source/ppt/slidefragmenthandler.cxx            |   34 +++++++++++++++++++++
 7 files changed, 84 insertions(+), 24 deletions(-)

New commits:
commit b1653c6b3968921ffee34bab2106c6d4e800179c
Author: Muthu Subramanian <sumuthu at suse.com>
Date:   Thu Aug 16 16:57:47 2012 +0530

    n#773048: PPTX shape margins need to be rotated as well.

diff --git a/oox/inc/oox/drawingml/textbodyproperties.hxx b/oox/inc/oox/drawingml/textbodyproperties.hxx
index adb9c1f..addad6e 100644
--- a/oox/inc/oox/drawingml/textbodyproperties.hxx
+++ b/oox/inc/oox/drawingml/textbodyproperties.hxx
@@ -32,6 +32,7 @@
 #include <com/sun/star/drawing/TextVerticalAdjust.hpp>
 #include "oox/helper/helper.hxx"
 #include "oox/helper/propertymap.hxx"
+#include <boost/optional.hpp>
 
 namespace oox {
 namespace drawingml {
@@ -43,10 +44,12 @@ struct TextBodyProperties
     PropertyMap                                     maPropertyMap;
     OptValue< sal_Int32 >                           moRotation;
     OptValue< sal_Int32 >                           moVert;
+    boost::optional< sal_Int32 >                    moInsets[4];
     ::com::sun::star::drawing::TextVerticalAdjust   meVA;
 
     explicit            TextBodyProperties();
 
+    void                pushRotationAdjustments( sal_Int32 nRotation );
     void                pushVertSimulation();
 };
 
diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx
index 66a1ee1..242dd43 100644
--- a/oox/source/drawingml/shape.cxx
+++ b/oox/source/drawingml/shape.cxx
@@ -525,7 +525,10 @@ Reference< XShape > Shape::createAndInsert(
 
         // add properties from textbody to shape properties
         if( mpTextBody.get() )
+        {
+            mpTextBody->getTextProperties().pushRotationAdjustments( mnRotation );
             aShapeProps.assignUsed( mpTextBody->getTextProperties().maPropertyMap );
+        }
 
         // applying properties
         aShapeProps.assignUsed( getShapeProperties() );
diff --git a/oox/source/drawingml/textbodyproperties.cxx b/oox/source/drawingml/textbodyproperties.cxx
index d007647..8438ed5 100644
--- a/oox/source/drawingml/textbodyproperties.cxx
+++ b/oox/source/drawingml/textbodyproperties.cxx
@@ -67,6 +67,28 @@ void TextBodyProperties::pushVertSimulation()
     }
 }
 
+/* Push adjusted values, taking into consideration Shape Rotation */
+void TextBodyProperties::pushRotationAdjustments( sal_Int32 nRotation )
+{
+    sal_Int32 nOff      = 0;
+    sal_Int32 aProps[]  = { PROP_TextLeftDistance, PROP_TextUpperDistance, PROP_TextRightDistance, PROP_TextLowerDistance };
+    sal_Int32 n         = ( sal_Int32 )( sizeof( aProps ) / sizeof( sal_Int32 ) );
+
+    switch( nRotation ) // TODO: What happens for part rotations ?
+    {
+        case (90*1*60000): nOff = 1; break;
+        case (90*2*60000): nOff = 2; break;
+        case (90*3*60000): nOff = 3; break;
+        default: break;
+    }
+
+    for( sal_Int32 i = 0; i < n; i++ )
+    {
+        if( moInsets[i] )
+            maPropertyMap[ aProps[ ( nOff++ ) % n ] ] <<= static_cast< sal_Int32 >( *moInsets[i] );
+    }
+}
+
 // ============================================================================
 
 } // namespace drawingml
diff --git a/oox/source/drawingml/textbodypropertiescontext.cxx b/oox/source/drawingml/textbodypropertiescontext.cxx
index a654fb6..711da4c 100644
--- a/oox/source/drawingml/textbodypropertiescontext.cxx
+++ b/oox/source/drawingml/textbodypropertiescontext.cxx
@@ -63,25 +63,12 @@ TextBodyPropertiesContext::TextBodyPropertiesContext( ContextHandler& rParent,
 
     // ST_Coordinate
     OUString sValue;
-    sValue = xAttributes->getOptionalValue( XML_lIns );
-    if( !sValue.isEmpty() ) {
-    sal_Int32 nLeftInset = ( !sValue.isEmpty() ? GetCoordinate(  sValue ) : 91440 / 360 );
-    mrTextBodyProp.maPropertyMap[ PROP_TextLeftDistance ]  <<= static_cast< sal_Int32 >( nLeftInset );
-    }
-    sValue = xAttributes->getOptionalValue( XML_tIns );
-    if( !sValue.isEmpty() ) {
-    sal_Int32 nTopInset  = ( !sValue.isEmpty() ? GetCoordinate(  sValue ) : 91440 / 360 );
-    mrTextBodyProp.maPropertyMap[ PROP_TextUpperDistance ] <<= static_cast< sal_Int32 >( nTopInset );
-    }
-    sValue = xAttributes->getOptionalValue( XML_rIns );
-    if( !sValue.isEmpty() ) {
-    sal_Int32 nRightInset  = ( !sValue.isEmpty() ? GetCoordinate(  sValue ) : 91440 / 360 );
-    mrTextBodyProp.maPropertyMap[ PROP_TextRightDistance ] <<= static_cast< sal_Int32 >( nRightInset );
-    }
-    sValue = xAttributes->getOptionalValue( XML_bIns );
-    if( !sValue.isEmpty() ) {
-    sal_Int32 nBottonInset = ( !sValue.isEmpty() ? GetCoordinate(  sValue ) : 45720 / 360 );
-    mrTextBodyProp.maPropertyMap[ PROP_TextLowerDistance ] <<= static_cast< sal_Int32 >( nBottonInset );
+    sal_Int32 aIns[] = { XML_lIns, XML_tIns, XML_rIns, XML_bIns };
+    for( sal_Int32 i = 0; i < ( sal_Int32 )( sizeof( aIns ) / sizeof( sal_Int32 ) ); i++)
+    {
+        sValue = xAttributes->getOptionalValue( aIns[i] );
+        if( !sValue.isEmpty() )
+            mrTextBodyProp.moInsets[i] = GetCoordinate( sValue );
     }
 
     bool bAnchorCenter = aAttribs.getBool( XML_anchorCtr, false );
commit d3d19085e3b1132c7aad9767b20e76d0ac7c6cd3
Author: David Tardon <dtardon at redhat.com>
Date:   Thu Jul 5 06:57:06 2012 +0200

    remove forgotten debug printf
    
    Change-Id: Iff5a53735d78a2afcf90299a5f28a47f1376e393

diff --git a/oox/source/ppt/slidefragmenthandler.cxx b/oox/source/ppt/slidefragmenthandler.cxx
index d014164..49736dd 100644
--- a/oox/source/ppt/slidefragmenthandler.cxx
+++ b/oox/source/ppt/slidefragmenthandler.cxx
@@ -98,7 +98,6 @@ SlideFragmentHandler::~SlideFragmentHandler() throw()
         // Import notesMaster
         PowerPointImport& rFilter = dynamic_cast< PowerPointImport& >( getFilter() );
         OUString aNotesFragmentPath = getFragmentPathFromFirstType( CREATE_OFFICEDOC_RELATION_TYPE( "notesMaster" ) );
-        printf("notesMaster: %s\n", ::rtl::OUStringToOString(aNotesFragmentPath, RTL_TEXTENCODING_UTF8).getStr() );
 
         std::vector< SlidePersistPtr >& rMasterPages( rFilter.getMasterPages() );
         std::vector< SlidePersistPtr >::iterator aIter( rMasterPages.begin() );
commit 3dd5267d1808180a65f9e401caad791cf3870ac0
Author: Muthu Subramanian <sumuthu at suse.com>
Date:   Wed Jul 4 20:56:47 2012 +0530

    n#768027: Slide notesMaster and notes import.

diff --git a/oox/source/ppt/pptshape.cxx b/oox/source/ppt/pptshape.cxx
index 2f2e330..417c1bd 100644
--- a/oox/source/ppt/pptshape.cxx
+++ b/oox/source/ppt/pptshape.cxx
@@ -264,6 +264,10 @@ void PPTShape::addShape(
             // use placeholder index if possible
             if( mnSubType && getSubTypeIndex().has() && rSlidePersist.getMasterPersist().get() ) {
                 oox::drawingml::ShapePtr pPlaceholder = PPTShape::findPlaceholderByIndex( getSubTypeIndex().get(), rSlidePersist.getMasterPersist()->getShapes()->getChildren() );
+                // TODO: Check if this is required for non-notes slides as well...
+                if( rSlidePersist.isNotesPage() && pPlaceholder.get() && pPlaceholder->getSubType() != getSubType() )
+                    pPlaceholder.reset();
+
                 if( pPlaceholder.get()) {
                     OSL_TRACE("found placeholder with index: %d and type: %s", getSubTypeIndex().get(), lclDebugSubType( mnSubType ));
                 }
diff --git a/oox/source/ppt/pptshapecontext.cxx b/oox/source/ppt/pptshapecontext.cxx
index 0333f5a..c301f23 100644
--- a/oox/source/ppt/pptshapecontext.cxx
+++ b/oox/source/ppt/pptshapecontext.cxx
@@ -65,14 +65,17 @@ PPTShapeContext::PPTShapeContext( ContextHandler& rParent, const SlidePersistPtr
 oox::drawingml::ShapePtr findPlaceholder( const sal_Int32 nMasterPlaceholder, const OptValue< sal_Int32 >& oSubTypeIndex, std::vector< oox::drawingml::ShapePtr >& rShapes )
 {
     oox::drawingml::ShapePtr aShapePtr;
-    oox::drawingml::ShapePtr aTmpShapePtr;
+    oox::drawingml::ShapePtr aChoiceShapePtr1;
+    oox::drawingml::ShapePtr aChoiceShapePtr2;
     std::vector< oox::drawingml::ShapePtr >::reverse_iterator aRevIter( rShapes.rbegin() );
     while( aRevIter != rShapes.rend() )
     {
         if ( (*aRevIter)->getSubType() == nMasterPlaceholder )
         {
-            if( !oSubTypeIndex.has() && aTmpShapePtr == NULL )
-                aTmpShapePtr = *aRevIter;
+            if( !oSubTypeIndex.has() && aChoiceShapePtr1 == NULL )
+                aChoiceShapePtr1 = *aRevIter;
+            else if( aChoiceShapePtr2 == NULL )
+                aChoiceShapePtr2 = *aRevIter;
             if( (*aRevIter)->getSubTypeIndex() == oSubTypeIndex )
             {
                 aShapePtr = *aRevIter;
@@ -86,7 +89,7 @@ oox::drawingml::ShapePtr findPlaceholder( const sal_Int32 nMasterPlaceholder, co
         ++aRevIter;
     }
     if( aShapePtr == NULL )
-        return aTmpShapePtr;
+        return aChoiceShapePtr1 ? aChoiceShapePtr1 : aChoiceShapePtr2;
     return aShapePtr;
 }
 
@@ -185,9 +188,13 @@ Reference< XFastContextHandler > PPTShapeContext::createFastChildContext( sal_In
                                   if ( pMasterPersist.get() ) {
                                       if( pPPTShapePtr->getSubTypeIndex().has() )
                                           pPlaceholder = PPTShape::findPlaceholderByIndex( pPPTShapePtr->getSubTypeIndex().get(), pMasterPersist->getShapes()->getChildren() );
-                                      if ( !pPlaceholder.get() )
+                                      // TODO: Check if this is required for non-notes pages as well...
+                                      if ( !pPlaceholder.get() || ( pMasterPersist->isNotesPage() && pPlaceholder->getSubType() != nFirstPlaceholder &&
+                                                                                                     pPlaceholder->getSubType() != nSecondPlaceholder ) )
+                                      {
                                           pPlaceholder = findPlaceholder( nFirstPlaceholder, nSecondPlaceholder,
                                                                           pPPTShapePtr->getSubTypeIndex(), pMasterPersist->getShapes()->getChildren() );
+                                      }
                                   }
                               }
                               if ( pPlaceholder.get() )
diff --git a/oox/source/ppt/slidefragmenthandler.cxx b/oox/source/ppt/slidefragmenthandler.cxx
index 9f98742..d014164 100644
--- a/oox/source/ppt/slidefragmenthandler.cxx
+++ b/oox/source/ppt/slidefragmenthandler.cxx
@@ -45,6 +45,7 @@
 #include "oox/vml/vmldrawing.hxx"
 #include "oox/vml/vmldrawingfragment.hxx"
 #include "oox/drawingml/clrschemecontext.hxx"
+#include "oox/ppt/pptimport.hxx"
 
 
 using rtl::OUString;
@@ -93,6 +94,40 @@ SlideFragmentHandler::~SlideFragmentHandler() throw()
         return this;
     }
     case PPT_TOKEN( notes ):            // CT_NotesSlide
+    {
+        // Import notesMaster
+        PowerPointImport& rFilter = dynamic_cast< PowerPointImport& >( getFilter() );
+        OUString aNotesFragmentPath = getFragmentPathFromFirstType( CREATE_OFFICEDOC_RELATION_TYPE( "notesMaster" ) );
+        printf("notesMaster: %s\n", ::rtl::OUStringToOString(aNotesFragmentPath, RTL_TEXTENCODING_UTF8).getStr() );
+
+        std::vector< SlidePersistPtr >& rMasterPages( rFilter.getMasterPages() );
+        std::vector< SlidePersistPtr >::iterator aIter( rMasterPages.begin() );
+        while( aIter != rMasterPages.end() )
+        {
+            if( (*aIter)->getPath() == aNotesFragmentPath )
+            {
+                if( !mpSlidePersistPtr->getMasterPersist() )
+                    mpSlidePersistPtr->setMasterPersist( *aIter );
+                break;
+            }
+            ++aIter;
+        }
+        if( aIter == rMasterPages.end() && !mpSlidePersistPtr->getMasterPersist() )
+        {
+            TextListStylePtr pTextListStyle(new TextListStyle);
+            SlidePersistPtr pMasterPersistPtr = SlidePersistPtr( new SlidePersist( rFilter, sal_True, sal_True, mpSlidePersistPtr->getPage(),
+                                ShapePtr( new PPTShape( Master, "com.sun.star.drawing.GroupShape" ) ), mpSlidePersistPtr->getNotesTextStyle() ) );
+            //pMasterPersistPtr->setLayoutPath( aLayoutFragmentPath );
+            pMasterPersistPtr->setPath( aNotesFragmentPath );
+            rFilter.getMasterPages().push_back( pMasterPersistPtr );
+            FragmentHandlerRef xMasterFragmentHandler( new SlideFragmentHandler( rFilter, aNotesFragmentPath, pMasterPersistPtr, Master ) );
+            rFilter.importFragment( xMasterFragmentHandler );
+            //pMasterPersistPtr->createBackground( rFilter );
+            //pMasterPersistPtr->createXShapes( rFilter );
+            mpSlidePersistPtr->setMasterPersist( pMasterPersistPtr );
+        }
+        return this;
+    }
     case PPT_TOKEN( notesMaster ):      // CT_NotesMaster
         return this;
     case PPT_TOKEN( cSld ):             // CT_CommonSlideData


More information about the Libreoffice-commits mailing list