[Libreoffice-commits] core.git: oox/source sd/qa

yogesh.bharate001 yogesh.bharate at synerzip.com
Tue Apr 21 15:45:04 PDT 2015


 oox/source/export/shapes.cxx     |   14 +++++++++++
 sd/qa/unit/data/pptx/n90223.pptx |binary
 sd/qa/unit/export-tests.cxx      |   46 +++++++++++++++++++++++++++++++++++++++
 3 files changed, 59 insertions(+), 1 deletion(-)

New commits:
commit 636c5a63d67b52b0d2f9f21a863c45eca6ac9ff7
Author: yogesh.bharate001 <yogesh.bharate at synerzip.com>
Date:   Thu Mar 26 10:48:15 2015 +0530

    tdf#90223:PPTX table cell left  and right margin is not exported.
    
    Problem Description :
    - After roundtripping, when we open .pptx in MSO2010 or LibreOffice,
    tcPr marL & marR values doesnot exported.
    - Due to this cell text formatting changes.
    
    XML difference:
    Original :
     <a:tcPr marL="45720" marR="45720">
    
    After RT :
     <a:tcPr/>
    
    Solution : Added support for table cell left and right margin.
    
    Conflicts:
    	sd/qa/unit/export-tests.cxx
    
    Change-Id: I45f7b796155fd4445acbf19133954aadaf70890d
    Reviewed-on: https://gerrit.libreoffice.org/15015
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/oox/source/export/shapes.cxx b/oox/source/export/shapes.cxx
index c95f99c..7caf3e9 100644
--- a/oox/source/export/shapes.cxx
+++ b/oox/source/export/shapes.cxx
@@ -1028,7 +1028,19 @@ void ShapeExport::WriteTable( Reference< XShape > rXShape  )
 
 void ShapeExport::WriteTableCellProperties(Reference< XPropertySet> xCellPropSet)
 {
-    mpFS->startElementNS( XML_a, XML_tcPr, FSEND );
+    sal_Int32 nLeftMargin(0), nRightMargin(0);
+
+    Any aLeftMargin = xCellPropSet->getPropertyValue("TextLeftDistance");
+    aLeftMargin >>= nLeftMargin;
+
+    Any aRightMargin = xCellPropSet->getPropertyValue("TextRightDistance");
+    aRightMargin >>= nRightMargin;
+
+    mpFS->startElementNS( XML_a, XML_tcPr,
+    XML_marL, nLeftMargin > 0 ? I32S( oox::drawingml::convertHmmToEmu( nLeftMargin ) ) : NULL,
+    XML_marR, nRightMargin > 0 ? I32S( oox::drawingml::convertHmmToEmu( nRightMargin ) ): NULL,
+    FSEND );
+
     // Write background fill for table cell.
     DrawingML::WriteFill(xCellPropSet);
     // TODO
diff --git a/sd/qa/unit/data/pptx/n90223.pptx b/sd/qa/unit/data/pptx/n90223.pptx
new file mode 100755
index 0000000..0a9ee82
Binary files /dev/null and b/sd/qa/unit/data/pptx/n90223.pptx differ
diff --git a/sd/qa/unit/export-tests.cxx b/sd/qa/unit/export-tests.cxx
index 60a209b..8472ce1 100644
--- a/sd/qa/unit/export-tests.cxx
+++ b/sd/qa/unit/export-tests.cxx
@@ -24,6 +24,8 @@
 #include <editeng/postitem.hxx>
 #include <editeng/bulletitem.hxx>
 
+#include <oox/drawingml/drawingmltypes.hxx>
+
 #include <rsc/rscsfx.hxx>
 
 #include <svx/svdoutl.hxx>
@@ -57,6 +59,8 @@
 #include <com/sun/star/frame/XStorable.hpp>
 #include <com/sun/star/drawing/FillStyle.hpp>
 #include <svx/svdotable.hxx>
+#include <com/sun/star/table/XTable.hpp>
+#include <com/sun/star/table/XMergeableCell.hpp>
 
 #include <config_features.h>
 #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
@@ -86,6 +90,8 @@ public:
     void testTableCellFillProperties();
     void testBulletStartNumber();
     void testLineStyle();
+    void testCellLeftAndRightMargin();
+
 #if !defined WNT
     void testBnc822341();
 #endif
@@ -111,6 +117,7 @@ public:
     CPPUNIT_TEST(testTableCellFillProperties);
     CPPUNIT_TEST(testBulletStartNumber);
     CPPUNIT_TEST(testLineStyle);
+    CPPUNIT_TEST(testCellLeftAndRightMargin);
 #if !defined WNT
     CPPUNIT_TEST(testBnc822341);
 #endif
@@ -868,6 +875,45 @@ void SdExportTest::testBnc822341()
 
 #endif
 
+void SdExportTest::testCellLeftAndRightMargin()
+{
+    ::sd::DrawDocShellRef xDocShRef = loadURL(getURLFromSrc("sd/qa/unit/data/pptx/n90223.pptx"), PPTX);
+    xDocShRef = saveAndReload( xDocShRef, PPTX );
+    sal_Int32 nLeftMargin, nRightMargin;
+
+    uno::Reference< drawing::XDrawPagesSupplier > xDoc(
+        xDocShRef->GetDoc()->getUnoModel(), uno::UNO_QUERY_THROW );
+
+    uno::Reference< drawing::XDrawPage > xPage(xDoc->getDrawPages()->getByIndex(0), uno::UNO_QUERY_THROW );
+    SdDrawDocument *pDoc = xDocShRef->GetDoc();
+    CPPUNIT_ASSERT_MESSAGE( "no document", pDoc != NULL );
+
+    const SdrPage *pPage = pDoc->GetPage(1);
+    CPPUNIT_ASSERT_MESSAGE( "no page", pPage != NULL );
+
+    sdr::table::SdrTableObj *pTableObj = dynamic_cast<sdr::table::SdrTableObj*>(pPage->GetObj(0));
+    CPPUNIT_ASSERT( pTableObj );
+
+    uno::Reference< com::sun::star::table::XTable > xTable (pTableObj->getTable(), uno::UNO_QUERY_THROW);
+    uno::Reference< com::sun::star::table::XMergeableCell > xCell( xTable->getCellByPosition(0, 0), uno::UNO_QUERY_THROW );
+    uno::Reference< beans::XPropertySet > xCellPropSet(xCell, uno::UNO_QUERY_THROW);
+
+    uno::Any aLeftMargin = xCellPropSet->getPropertyValue("TextLeftDistance");
+    aLeftMargin >>= nLeftMargin ;
+
+    uno::Any aRightMargin = xCellPropSet->getPropertyValue("TextRightDistance");
+    aRightMargin >>= nRightMargin ;
+
+    // Convert values to EMU
+    nLeftMargin  =  oox::drawingml::convertHmmToEmu( nLeftMargin );
+    nRightMargin =  oox::drawingml::convertHmmToEmu( nRightMargin );
+
+    CPPUNIT_ASSERT_EQUAL(sal_Int32(45720), nLeftMargin);
+    CPPUNIT_ASSERT_EQUAL(sal_Int32(45720), nRightMargin);
+
+    xDocShRef->DoClose();
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(SdExportTest);
 
 CPPUNIT_PLUGIN_IMPLEMENT();


More information about the Libreoffice-commits mailing list