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

yogesh.bharate001 yogesh.bharate at synerzip.com
Sat May 9 12:55:51 PDT 2015


 include/oox/export/shapes.hxx            |    2 +
 oox/source/drawingml/table/tablecell.cxx |   11 +++++
 oox/source/export/shapes.cxx             |   59 +++++++++++++++++++++++++++++
 sd/qa/unit/data/pptx/n90190.pptx         |binary
 sd/qa/unit/export-tests.cxx              |   61 +++++++++++++++++++++++++++++--
 5 files changed, 129 insertions(+), 4 deletions(-)

New commits:
commit 3e4d2043e99201ec542186039e3be34d3c226111
Author: yogesh.bharate001 <yogesh.bharate at synerzip.com>
Date:   Thu Apr 16 19:24:37 2015 +0530

    tdf#90190 PPTX table cell border width is not exported.
    
    Problem:
    - Table cell border width is not exported.
    i.e lnL, lnR, lnT, LnB are not exported inside the tcPr.
    
    XML Difference:
    Original :
    <a:lnT w = "76200">
    
    After RT : tag is missing.
    
    Solution : Added solution for Table cell border width.
    
    Change-Id: I19185f2ad176325bf7990c9da6becc66557c717b
    Reviewed-on: https://gerrit.libreoffice.org/15350
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/include/oox/export/shapes.hxx b/include/oox/export/shapes.hxx
index 7b5afb0..c979b3f 100644
--- a/include/oox/export/shapes.hxx
+++ b/include/oox/export/shapes.hxx
@@ -162,6 +162,8 @@ public:
 
     void WriteTableCellProperties(::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > rXPropSet);
 
+    void WriteTableCellBorders(::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > rXPropSet);
+
     sal_Int32 GetNewShapeID( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > rShape );
     sal_Int32 GetNewShapeID( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > rShape, ::oox::core::XmlFilterBase* pFB );
     sal_Int32 GetShapeID( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > rShape );
diff --git a/oox/source/drawingml/table/tablecell.cxx b/oox/source/drawingml/table/tablecell.cxx
index d753326..135e5b2 100644
--- a/oox/source/drawingml/table/tablecell.cxx
+++ b/oox/source/drawingml/table/tablecell.cxx
@@ -70,7 +70,7 @@ void applyLineAttributes( const ::oox::core::XmlFilterBase& rFilterBase,
         sal_Int32 nPropId )
 {
     BorderLine2 aBorderLine;
-    if( rLineProperties.maLineFill.moFillType.differsFrom( XML_noFill ) )
+    if( rLineProperties.maLineFill.moFillType.differsFrom( XML_noFill ))
     {
         Color aColor = rLineProperties.maLineFill.getBestSolidColor();
         aBorderLine.Color = aColor.getColor( rFilterBase.getGraphicHelper() );
@@ -79,6 +79,15 @@ void applyLineAttributes( const ::oox::core::XmlFilterBase& rFilterBase,
         aBorderLine.LineWidth = static_cast< sal_Int16 >( GetCoordinate( rLineProperties.moLineWidth.get( 0 ) ) / 2 );
         aBorderLine.LineDistance = 0;
     }
+    else if ( rLineProperties.moLineWidth.get(0)!=0 )
+    {
+        // Default color of Line is black.
+        rLineProperties.maLineFill.maFillColor.setSrgbClr( 0 );
+        aBorderLine.OuterLineWidth = static_cast< sal_Int16 >( GetCoordinate( rLineProperties.moLineWidth.get( 0 ) ) / 4 );
+        aBorderLine.InnerLineWidth = static_cast< sal_Int16 >( GetCoordinate( rLineProperties.moLineWidth.get( 0 ) ) / 4 );
+        aBorderLine.LineWidth = static_cast< sal_Int16 >( GetCoordinate( rLineProperties.moLineWidth.get( 0 ) ) / 2 );
+        aBorderLine.LineDistance = 0;
+    }
 
     PropertySet aPropSet( rxPropSet );
     aPropSet.setProperty( nPropId, aBorderLine );
diff --git a/oox/source/export/shapes.cxx b/oox/source/export/shapes.cxx
index 349f398..cdeefac 100644
--- a/oox/source/export/shapes.cxx
+++ b/oox/source/export/shapes.cxx
@@ -66,6 +66,7 @@
 #include <com/sun/star/table/XMergeableCell.hpp>
 #include <com/sun/star/chart2/XChartDocument.hpp>
 #include <com/sun/star/frame/XModel.hpp>
+#include <com/sun/star/table/BorderLine2.hpp>
 #include <tools/stream.hxx>
 #include <vcl/cvtgrf.hxx>
 #include <unotools/fontcvt.hxx>
@@ -1061,10 +1062,66 @@ void ShapeExport::WriteTableCellProperties(Reference< XPropertySet> xCellPropSet
     DrawingML::WriteFill(xCellPropSet);
     // TODO
     // tcW : Table cell width
-    // tcBorders : Table cell border values.
+    WriteTableCellBorders(xCellPropSet);
     mpFS->endElementNS( XML_a, XML_tcPr );
 }
 
+void ShapeExport::WriteTableCellBorders(Reference< XPropertySet> xCellPropSet)
+{
+    BorderLine2 aBorderLine;
+
+// lnL - Left Border Line Properties of table cell
+    xCellPropSet->getPropertyValue("LeftBorder") >>= aBorderLine;
+    sal_Int32 nLeftBorder = aBorderLine.LineWidth;
+
+// While importing the table cell border line width, it converts EMU->Hmm then divided result by 2.
+// To get original value of LineWidth need to multiple by 2.
+    nLeftBorder = nLeftBorder*2;
+    nLeftBorder = oox::drawingml::convertHmmToEmu( nLeftBorder );
+
+    if(nLeftBorder > 0)
+    {
+        mpFS->startElementNS( XML_a, XML_lnL, XML_w, I32S(nLeftBorder), FSEND );
+        mpFS->endElementNS( XML_a, XML_lnL );
+    }
+
+// lnR - Right Border Line Properties of table cell
+    xCellPropSet->getPropertyValue("RightBorder") >>= aBorderLine;
+    sal_Int32 nRightBorder = aBorderLine.LineWidth;
+    nRightBorder = nRightBorder * 2 ;
+    nRightBorder = oox::drawingml::convertHmmToEmu( nRightBorder );
+
+    if(nRightBorder > 0)
+    {
+        mpFS->startElementNS( XML_a, XML_lnR, XML_w, I32S(nRightBorder), FSEND);
+        mpFS->endElementNS( XML_a, XML_lnR);
+    }
+
+// lnT - Top Border Line Properties of table cell
+    xCellPropSet->getPropertyValue("TopBorder") >>= aBorderLine;
+    sal_Int32 nTopBorder = aBorderLine.LineWidth;
+    nTopBorder = nTopBorder * 2;
+    nTopBorder = oox::drawingml::convertHmmToEmu( nTopBorder );
+
+    if(nTopBorder > 0)
+    {
+        mpFS->startElementNS( XML_a, XML_lnT, XML_w, I32S(nTopBorder), FSEND);
+        mpFS->endElementNS( XML_a, XML_lnT);
+    }
+
+// lnB - Bottom Border Line Properties of table cell
+    xCellPropSet->getPropertyValue("BottomBorder") >>= aBorderLine;
+    sal_Int32 nBottomBorder = aBorderLine.LineWidth;
+    nBottomBorder = nBottomBorder * 2;
+    nBottomBorder = oox::drawingml::convertHmmToEmu( nBottomBorder );
+
+    if(nBottomBorder > 0)
+    {
+        mpFS->startElementNS( XML_a, XML_lnB, XML_w, I32S(nBottomBorder), FSEND);
+        mpFS->endElementNS( XML_a, XML_lnB);
+    }
+}
+
 ShapeExport& ShapeExport::WriteTableShape( Reference< XShape > xShape )
 {
     FSHelperPtr pFS = GetFS();
diff --git a/sd/qa/unit/data/pptx/n90190.pptx b/sd/qa/unit/data/pptx/n90190.pptx
new file mode 100644
index 0000000..ae83eb6
Binary files /dev/null and b/sd/qa/unit/data/pptx/n90190.pptx differ
diff --git a/sd/qa/unit/export-tests.cxx b/sd/qa/unit/export-tests.cxx
index 56e4c6b..78fce6b 100644
--- a/sd/qa/unit/export-tests.cxx
+++ b/sd/qa/unit/export-tests.cxx
@@ -28,6 +28,7 @@
 
 #include <rsc/rscsfx.hxx>
 
+
 #include <svx/svdoutl.hxx>
 #include <svx/svdotext.hxx>
 #include <svx/svdoashp.hxx>
@@ -59,6 +60,10 @@
 #include <com/sun/star/frame/XStorable.hpp>
 #include <com/sun/star/drawing/FillStyle.hpp>
  #include <com/sun/star/text/WritingMode2.hpp>
+#include <com/sun/star/table/BorderLine2.hpp>
+#include <com/sun/star/table/XTable.hpp>
+#include <com/sun/star/table/XMergeableCell.hpp>
+
 #include <svx/svdotable.hxx>
 #include <com/sun/star/table/XTable.hpp>
 #include <com/sun/star/table/XMergeableCell.hpp>
@@ -93,6 +98,7 @@ public:
     void testLineStyle();
     void testCellLeftAndRightMargin();
     void testRightToLeftParaghraph();
+    void testTableCellBorder();
 
 #if !defined WNT
     void testBnc822341();
@@ -121,6 +127,7 @@ public:
     CPPUNIT_TEST(testLineStyle);
     CPPUNIT_TEST(testCellLeftAndRightMargin);
     CPPUNIT_TEST(testRightToLeftParaghraph);
+    CPPUNIT_TEST(testTableCellBorder);
 
 #if !defined WNT
     CPPUNIT_TEST(testBnc822341);
@@ -837,7 +844,6 @@ void SdExportTest::testLineStyle()
     CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong style",drawing::LineStyle_SOLID, rStyleItem.GetValue());
 
     xDocShRef->DoClose();
-
 }
 
 void SdExportTest::testRightToLeftParaghraph()
@@ -872,7 +878,6 @@ void SdExportTest::testRightToLeftParaghraph()
 
     xDocShRef->DoClose();
 }
-
 #if !defined WNT
 
 void SdExportTest::testBnc822341()
@@ -951,6 +956,58 @@ void SdExportTest::testCellLeftAndRightMargin()
     xDocShRef->DoClose();
 }
 
+void SdExportTest::testTableCellBorder()
+{
+    ::sd::DrawDocShellRef xDocShRef = loadURL(getURLFromSrc("sd/qa/unit/data/pptx/n90190.pptx"), PPTX);
+    xDocShRef = saveAndReload( xDocShRef, PPTX );
+
+    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 );
+
+    table::BorderLine2 aBorderLine;
+
+    uno::Reference< 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);
+
+    xCellPropSet->getPropertyValue("LeftBorder") >>= aBorderLine;
+    sal_Int32 nLeftBorder = aBorderLine.LineWidth ;
+// While importing the table cell border line width, it converts EMU->Hmm then divided result by 2.
+// To get original value of LineWidth need to multiple by 2.
+     nLeftBorder = nLeftBorder * 2 ;
+    nLeftBorder = oox::drawingml::convertHmmToEmu( nLeftBorder );
+    CPPUNIT_ASSERT(nLeftBorder);
+
+    xCellPropSet->getPropertyValue("RightBorder") >>= aBorderLine;
+    sal_Int32 nRightBorder = aBorderLine.LineWidth ;
+    nRightBorder = nRightBorder * 2 ;
+    nRightBorder = oox::drawingml::convertHmmToEmu( nRightBorder );
+    CPPUNIT_ASSERT(nRightBorder);
+
+    xCellPropSet->getPropertyValue("TopBorder") >>= aBorderLine;
+    sal_Int32 nTopBorder = aBorderLine.LineWidth ;
+    nTopBorder = nTopBorder * 2 ;
+    nTopBorder = oox::drawingml::convertHmmToEmu( nTopBorder );
+    CPPUNIT_ASSERT(nTopBorder);
+
+    xCellPropSet->getPropertyValue("BottomBorder") >>= aBorderLine;
+    sal_Int32 nBottomBorder = aBorderLine.LineWidth ;
+    nBottomBorder = nBottomBorder * 2 ;
+    nBottomBorder = oox::drawingml::convertHmmToEmu( nBottomBorder );
+    CPPUNIT_ASSERT(nBottomBorder);
+
+    xDocShRef->DoClose();
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(SdExportTest);
 
 CPPUNIT_PLUGIN_IMPLEMENT();


More information about the Libreoffice-commits mailing list