[Libreoffice-commits] core.git: 3 commits - connectivity/source sd/source

Caolán McNamara caolanm at redhat.com
Wed Apr 22 04:49:29 PDT 2015


 connectivity/source/drivers/mozab/MStatement.cxx |    1 
 sd/source/filter/eppt/epptso.cxx                 |  348 +++++++++++------------
 2 files changed, 182 insertions(+), 167 deletions(-)

New commits:
commit deaed8aff6de824a76d939a02edb0d2ff4a4ccec
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Wed Apr 22 12:13:33 2015 +0100

    fix re-export of novell590442-1.ppt to ppt
    
    we always close this container, even if we didn't open it
    
    original commit always opened the SpgrContainer, and always
    closed the SpgrContainer. (but seems to have a loophole, presumably
    never hit where the SpContainer could be opened and not closed)
    
    make a container guard which opens in ctor and closes in dtor.
    
    should make ppt export crash stats hit 0
    
    Change-Id: I2aead7397448b674e433a4097c97285067a6dc6e

diff --git a/sd/source/filter/eppt/epptso.cxx b/sd/source/filter/eppt/epptso.cxx
index 4132696..9885c0d 100644
--- a/sd/source/filter/eppt/epptso.cxx
+++ b/sd/source/filter/eppt/epptso.cxx
@@ -3571,6 +3571,22 @@ void PPTWriter::WriteCString( SvStream& rSt, const OUString& rString, sal_uInt32
     }
 }
 
+class ContainerGuard
+{
+private:
+    PptEscherEx* m_pPptEscherEx;
+public:
+    ContainerGuard(PptEscherEx* pPptEscherEx, sal_uInt16 nRecord)
+        : m_pPptEscherEx(pPptEscherEx)
+    {
+        m_pPptEscherEx->OpenContainer(nRecord);
+    }
+    ~ContainerGuard()
+    {
+        m_pPptEscherEx->CloseContainer();
+    }
+};
+
 void PPTWriter::ImplCreateTable( uno::Reference< drawing::XShape >& rXShape, EscherSolverContainer& aSolverContainer,
                                 EscherPropertyContainer& aPropOpt )
 {
@@ -3618,8 +3634,8 @@ void PPTWriter::ImplCreateTable( uno::Reference< drawing::XShape >& rXShape, Esc
                 if ( y == nRowCount - 1 && nPosition != maRect.Bottom())
                     maRect.Bottom() = nPosition;
             }
-            mpPptEscherEx->OpenContainer( ESCHER_SpgrContainer );
-            mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
+            std::unique_ptr<ContainerGuard> xSpgrContainer(new ContainerGuard(mpPptEscherEx, ESCHER_SpgrContainer));
+            std::unique_ptr<ContainerGuard> xSpContainer(new ContainerGuard(mpPptEscherEx, ESCHER_SpContainer));
             mpPptEscherEx->AddAtom( 16, ESCHER_Spgr, 1 );
             mpStrm    ->WriteInt32( maRect.Left() ) // Bounding box for the grouped shapes to which they are attached
                        .WriteInt32( maRect.Top() )
@@ -3651,7 +3667,7 @@ void PPTWriter::ImplCreateTable( uno::Reference< drawing::XShape >& rXShape, Esc
                 mpPptEscherEx->AddChildAnchor( maRect );
             else
                 mpPptEscherEx->AddClientAnchor( maRect );
-            mpPptEscherEx->CloseContainer();
+            xSpContainer.reset(); //ESCHER_SpContainer
 
             uno::Reference< table::XCellRange > xCellRange( xTable, uno::UNO_QUERY_THROW );
             for( sal_Int32 nRow = 0; nRow < xRows->getCount(); nRow++ )
@@ -3676,7 +3692,7 @@ void PPTWriter::ImplCreateTable( uno::Reference< drawing::XShape >& rXShape, Esc
                             aAny >>= mbFontIndependentLineSpacing;
 
                         EscherPropertyContainer aPropOptSp;
-                        mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
+                        std::unique_ptr<ContainerGuard> xCellContainer(new ContainerGuard(mpPptEscherEx, ESCHER_SpContainer));
                         ImplCreateShape( ESCHER_ShpInst_Rectangle, 0xa02, aSolverContainer );          // Flags: Connector | HasSpt | Child
                         aPropOptSp.CreateFillProperties( mXPropSet, true );
                         aPropOptSp.AddOpt( ESCHER_Prop_fNoLineDrawDash, 0x90000 );
@@ -3711,7 +3727,7 @@ void PPTWriter::ImplCreateTable( uno::Reference< drawing::XShape >& rXShape, Esc
                            .WriteUInt32( aClientTextBox.Tell() );
 
                         mpStrm->Write( aClientTextBox.GetData(), aClientTextBox.Tell() );
-                        mpPptEscherEx->CloseContainer();
+                        xCellContainer.reset();
                     }
                 }
             }
@@ -3830,12 +3846,13 @@ void PPTWriter::ImplCreateTable( uno::Reference< drawing::XShape >& rXShape, Esc
                     }
                 }
             }
+
+            xSpgrContainer.reset(); //ESCHER_SpgrContainer
         }
     }
     catch( uno::Exception& )
     {
     }
-    mpPptEscherEx->CloseContainer();
 }
 
 void TextObjBinary::Write( SvStream* pStrm )
commit 7aa166da24c81b7c22a0ec5daf7e09640ffb009b
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Wed Apr 22 12:07:27 2015 +0100

    we always open a container, so always close it
    
    the close container is inside the nRowCount != 0
    condition, so remove that and always write the close
    
    Change-Id: If05677ae46e8873b8780794bdd84f29505ea4112

diff --git a/sd/source/filter/eppt/epptso.cxx b/sd/source/filter/eppt/epptso.cxx
index 4223c58..4132696 100644
--- a/sd/source/filter/eppt/epptso.cxx
+++ b/sd/source/filter/eppt/epptso.cxx
@@ -3631,204 +3631,201 @@ void PPTWriter::ImplCreateTable( uno::Reference< drawing::XShape >& rXShape, Esc
             aSolverContainer.AddShape( rXShape, nShapeId );
             EscherPropertyContainer aPropOpt2;
 
-            if ( nRowCount )
-            {
-                SvMemoryStream aMemStrm;
-                aMemStrm.ObjectOwnsMemory( false );
-                aMemStrm.WriteUInt16( nRowCount )
-                        .WriteUInt16( nRowCount )
-                        .WriteUInt16( 4 );
-
-                std::vector< std::pair< sal_Int32, sal_Int32 > >::const_iterator aIter( aRows.begin() );
-                while( aIter != aRows.end() )
-                    aMemStrm.WriteInt32( (*aIter++).second );
-
-                aPropOpt.AddOpt( ESCHER_Prop_LockAgainstGrouping, 0x1000100 );
-                aPropOpt2.AddOpt( ESCHER_Prop_tableProperties, 1 );
-                aPropOpt2.AddOpt( ESCHER_Prop_tableRowProperties, true, aMemStrm.Tell(), static_cast< sal_uInt8* >( const_cast< void* >( aMemStrm.GetData() ) ), aMemStrm.Tell() );
-                aPropOpt.CreateShapeProperties( rXShape );
-                aPropOpt.Commit( *mpStrm );
-                aPropOpt2.Commit( *mpStrm, 3, ESCHER_UDefProp );
-                if ( GetCurrentGroupLevel() > 0 )
-                    mpPptEscherEx->AddChildAnchor( maRect );
-                else
-                    mpPptEscherEx->AddClientAnchor( maRect );
-                mpPptEscherEx->CloseContainer();
+            SvMemoryStream aMemStrm;
+            aMemStrm.ObjectOwnsMemory( false );
+            aMemStrm.WriteUInt16( nRowCount )
+                    .WriteUInt16( nRowCount )
+                    .WriteUInt16( 4 );
+
+            std::vector< std::pair< sal_Int32, sal_Int32 > >::const_iterator aIter( aRows.begin() );
+            while( aIter != aRows.end() )
+                aMemStrm.WriteInt32( (*aIter++).second );
+
+            aPropOpt.AddOpt( ESCHER_Prop_LockAgainstGrouping, 0x1000100 );
+            aPropOpt2.AddOpt( ESCHER_Prop_tableProperties, 1 );
+            aPropOpt2.AddOpt( ESCHER_Prop_tableRowProperties, true, aMemStrm.Tell(), static_cast< sal_uInt8* >( const_cast< void* >( aMemStrm.GetData() ) ), aMemStrm.Tell() );
+            aPropOpt.CreateShapeProperties( rXShape );
+            aPropOpt.Commit( *mpStrm );
+            aPropOpt2.Commit( *mpStrm, 3, ESCHER_UDefProp );
+            if ( GetCurrentGroupLevel() > 0 )
+                mpPptEscherEx->AddChildAnchor( maRect );
+            else
+                mpPptEscherEx->AddClientAnchor( maRect );
+            mpPptEscherEx->CloseContainer();
 
-                uno::Reference< table::XCellRange > xCellRange( xTable, uno::UNO_QUERY_THROW );
-                for( sal_Int32 nRow = 0; nRow < xRows->getCount(); nRow++ )
+            uno::Reference< table::XCellRange > xCellRange( xTable, uno::UNO_QUERY_THROW );
+            for( sal_Int32 nRow = 0; nRow < xRows->getCount(); nRow++ )
+            {
+                for( sal_Int32 nColumn = 0; nColumn < xColumns->getCount(); nColumn++ )
                 {
-                    for( sal_Int32 nColumn = 0; nColumn < xColumns->getCount(); nColumn++ )
+                    uno::Reference< table::XMergeableCell > xCell( xCellRange->getCellByPosition( nColumn, nRow ), uno::UNO_QUERY_THROW );
+                    if ( !xCell->isMerged() )
                     {
-                        uno::Reference< table::XMergeableCell > xCell( xCellRange->getCellByPosition( nColumn, nRow ), uno::UNO_QUERY_THROW );
-                        if ( !xCell->isMerged() )
-                        {
-                            sal_Int32 nLeft   = aColumns[ nColumn ].first;
-                            sal_Int32 nTop    = aRows[ nRow ].first;
-                            sal_Int32 nRight  = GetCellRight( nColumn, maRect,aColumns,xCell );
-                            sal_Int32 nBottom = GetCellBottom( nRow,  maRect,aRows,xCell );
-
-                            mbFontIndependentLineSpacing = false;
-                            mXPropSet = uno::Reference< beans::XPropertySet >( xCell, uno::UNO_QUERY_THROW );
-                            mXText = uno::Reference< text::XSimpleText >( xCell, uno::UNO_QUERY_THROW );
-                            mnTextSize = mXText->getString().getLength();
+                        sal_Int32 nLeft   = aColumns[ nColumn ].first;
+                        sal_Int32 nTop    = aRows[ nRow ].first;
+                        sal_Int32 nRight  = GetCellRight( nColumn, maRect,aColumns,xCell );
+                        sal_Int32 nBottom = GetCellBottom( nRow,  maRect,aRows,xCell );
+
+                        mbFontIndependentLineSpacing = false;
+                        mXPropSet = uno::Reference< beans::XPropertySet >( xCell, uno::UNO_QUERY_THROW );
+                        mXText = uno::Reference< text::XSimpleText >( xCell, uno::UNO_QUERY_THROW );
+                        mnTextSize = mXText->getString().getLength();
 
-                            ::com::sun::star::uno::Any aAny;
-                            if ( GetPropertyValue( aAny, mXPropSet, OUString( "FontIndependentLineSpacing" ), true ) )
-                                aAny >>= mbFontIndependentLineSpacing;
+                        ::com::sun::star::uno::Any aAny;
+                        if ( GetPropertyValue( aAny, mXPropSet, OUString( "FontIndependentLineSpacing" ), true ) )
+                            aAny >>= mbFontIndependentLineSpacing;
 
-                            EscherPropertyContainer aPropOptSp;
-                            mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
-                            ImplCreateShape( ESCHER_ShpInst_Rectangle, 0xa02, aSolverContainer );          // Flags: Connector | HasSpt | Child
-                            aPropOptSp.CreateFillProperties( mXPropSet, true );
-                            aPropOptSp.AddOpt( ESCHER_Prop_fNoLineDrawDash, 0x90000 );
-                            aPropOptSp.CreateTextProperties( mXPropSet, mnTxId += 0x60, false, true );
-                            aPropOptSp.AddOpt( ESCHER_Prop_WrapText, ESCHER_WrapSquare );
+                        EscherPropertyContainer aPropOptSp;
+                        mpPptEscherEx->OpenContainer( ESCHER_SpContainer );
+                        ImplCreateShape( ESCHER_ShpInst_Rectangle, 0xa02, aSolverContainer );          // Flags: Connector | HasSpt | Child
+                        aPropOptSp.CreateFillProperties( mXPropSet, true );
+                        aPropOptSp.AddOpt( ESCHER_Prop_fNoLineDrawDash, 0x90000 );
+                        aPropOptSp.CreateTextProperties( mXPropSet, mnTxId += 0x60, false, true );
+                        aPropOptSp.AddOpt( ESCHER_Prop_WrapText, ESCHER_WrapSquare );
 
-                            SvMemoryStream aClientTextBox( 0x200, 0x200 );
-                            SvMemoryStream  aExtBu( 0x200, 0x200 );
+                        SvMemoryStream aClientTextBox( 0x200, 0x200 );
+                        SvMemoryStream  aExtBu( 0x200, 0x200 );
 
-                            ImplWriteTextStyleAtom( aClientTextBox, EPP_TEXTTYPE_Other, 0, NULL, aExtBu, &aPropOptSp );
+                        ImplWriteTextStyleAtom( aClientTextBox, EPP_TEXTTYPE_Other, 0, NULL, aExtBu, &aPropOptSp );
 
-                            // need write client data for extend bullet
-                            if ( aExtBu.Tell() )
-                            {
-                                SvMemoryStream* pClientData = new SvMemoryStream( 0x200, 0x200 );
-                                ImplProgTagContainer( pClientData, &aExtBu );
-                                mpStrm->WriteUInt32( ( ESCHER_ClientData << 16 ) | 0xf )
-                                   .WriteUInt32( pClientData->Tell() );
+                        // need write client data for extend bullet
+                        if ( aExtBu.Tell() )
+                        {
+                            SvMemoryStream* pClientData = new SvMemoryStream( 0x200, 0x200 );
+                            ImplProgTagContainer( pClientData, &aExtBu );
+                            mpStrm->WriteUInt32( ( ESCHER_ClientData << 16 ) | 0xf )
+                               .WriteUInt32( pClientData->Tell() );
 
-                                mpStrm->Write( pClientData->GetData(), pClientData->Tell() );
-                                delete pClientData, pClientData = NULL;
-                            }
+                            mpStrm->Write( pClientData->GetData(), pClientData->Tell() );
+                            delete pClientData, pClientData = NULL;
+                        }
 
-                            aPropOptSp.Commit( *mpStrm );
-                            mpPptEscherEx->AddAtom( 16, ESCHER_ChildAnchor );
-                            mpStrm    ->WriteInt32( nLeft )
-                               .WriteInt32( nTop )
-                               .WriteInt32( nRight )
-                               .WriteInt32( nBottom );
+                        aPropOptSp.Commit( *mpStrm );
+                        mpPptEscherEx->AddAtom( 16, ESCHER_ChildAnchor );
+                        mpStrm    ->WriteInt32( nLeft )
+                           .WriteInt32( nTop )
+                           .WriteInt32( nRight )
+                           .WriteInt32( nBottom );
 
-                            mpStrm->WriteUInt32( ( ESCHER_ClientTextbox << 16 ) | 0xf )
-                               .WriteUInt32( aClientTextBox.Tell() );
+                        mpStrm->WriteUInt32( ( ESCHER_ClientTextbox << 16 ) | 0xf )
+                           .WriteUInt32( aClientTextBox.Tell() );
 
-                            mpStrm->Write( aClientTextBox.GetData(), aClientTextBox.Tell() );
-                            mpPptEscherEx->CloseContainer();
-                        }
+                        mpStrm->Write( aClientTextBox.GetData(), aClientTextBox.Tell() );
+                        mpPptEscherEx->CloseContainer();
                     }
                 }
+            }
 
-                static const char sTopBorder[] = "TopBorder";
-                static const char sBottomBorder[] = "BottomBorder";
-                static const char sLeftBorder[] = "LeftBorder";
-                static const char sRightBorder[] = "RightBorder";
+            static const char sTopBorder[] = "TopBorder";
+            static const char sBottomBorder[] = "BottomBorder";
+            static const char sLeftBorder[] = "LeftBorder";
+            static const char sRightBorder[] = "RightBorder";
 
-                // creating horz lines
-                for( sal_Int32 nLine = 0; nLine < ( xRows->getCount() + 1 ); nLine++ )
+            // creating horz lines
+            for( sal_Int32 nLine = 0; nLine < ( xRows->getCount() + 1 ); nLine++ )
+            {
+                for( sal_Int32 nColumn = 0; nColumn < xColumns->getCount(); nColumn++ )
                 {
-                    for( sal_Int32 nColumn = 0; nColumn < xColumns->getCount(); nColumn++ )
-                    {
-                        CellBorder aCellBorder;
-                        aCellBorder.mnPos = aColumns[ nColumn ].first;
-                        aCellBorder.mnLength = aColumns[ nColumn ].second;
-                        bool bTop = false;
-                        //write nLine*nColumn cell's top border
-                        if ( nLine < xRows->getCount() )
-                        {   // top border
-                            uno::Reference< table::XMergeableCell > xCell( xCellRange->getCellByPosition( nColumn, nLine ), uno::UNO_QUERY_THROW );
-                            if ( !xCell->isMerged()  )
-                            {
-                                uno::Reference< beans::XPropertySet > xPropSet2( xCell, uno::UNO_QUERY_THROW );
-                                table::BorderLine aBorderLine;
-                                if ( xPropSet2->getPropertyValue( sTopBorder ) >>= aBorderLine )
-                                    aCellBorder.maCellBorder = aBorderLine;
-                                sal_Int32 nRight  = GetCellRight( nColumn, maRect,aColumns,xCell );
-                                bTop = ImplCreateCellBorder( &aCellBorder, aCellBorder.mnPos,
-                                    aRows[ nLine ].first, nRight,  aRows[ nLine ].first );
-                            }
+                    CellBorder aCellBorder;
+                    aCellBorder.mnPos = aColumns[ nColumn ].first;
+                    aCellBorder.mnLength = aColumns[ nColumn ].second;
+                    bool bTop = false;
+                    //write nLine*nColumn cell's top border
+                    if ( nLine < xRows->getCount() )
+                    {   // top border
+                        uno::Reference< table::XMergeableCell > xCell( xCellRange->getCellByPosition( nColumn, nLine ), uno::UNO_QUERY_THROW );
+                        if ( !xCell->isMerged()  )
+                        {
+                            uno::Reference< beans::XPropertySet > xPropSet2( xCell, uno::UNO_QUERY_THROW );
+                            table::BorderLine aBorderLine;
+                            if ( xPropSet2->getPropertyValue( sTopBorder ) >>= aBorderLine )
+                                aCellBorder.maCellBorder = aBorderLine;
+                            sal_Int32 nRight  = GetCellRight( nColumn, maRect,aColumns,xCell );
+                            bTop = ImplCreateCellBorder( &aCellBorder, aCellBorder.mnPos,
+                                aRows[ nLine ].first, nRight,  aRows[ nLine ].first );
                         }
+                    }
 
-                        //if nLine*nColumn cell's top border is empty, check (nLine-1)*nColumn cell's bottom border
-                        //and write the last row's bottom border
-                        if (( nLine && !bTop ) || (nLine == xRows->getCount()))
-                        {   // bottom border
-                            sal_Int32 nRow =  nLine;
+                    //if nLine*nColumn cell's top border is empty, check (nLine-1)*nColumn cell's bottom border
+                    //and write the last row's bottom border
+                    if (( nLine && !bTop ) || (nLine == xRows->getCount()))
+                    {   // bottom border
+                        sal_Int32 nRow =  nLine;
 
-                            while( nRow )
-                            {   //find last no merged cell
-                                uno::Reference< table::XMergeableCell > xCell( xCellRange->getCellByPosition( nColumn, nRow - 1 ), uno::UNO_QUERY_THROW );
-                                if ( !xCell->isMerged()  )
+                        while( nRow )
+                        {   //find last no merged cell
+                            uno::Reference< table::XMergeableCell > xCell( xCellRange->getCellByPosition( nColumn, nRow - 1 ), uno::UNO_QUERY_THROW );
+                            if ( !xCell->isMerged()  )
+                            {
+                                sal_Int32 nRight  = GetCellRight( nColumn,  maRect,aColumns,xCell );
+                                sal_Int32 nBottom = GetCellBottom( nRow - 1, maRect,aRows,xCell );
+                                if ( nBottom == ( aRows[ nLine-1 ].first + aRows[ nLine-1 ].second ) )
                                 {
-                                    sal_Int32 nRight  = GetCellRight( nColumn,  maRect,aColumns,xCell );
-                                    sal_Int32 nBottom = GetCellBottom( nRow - 1, maRect,aRows,xCell );
-                                    if ( nBottom == ( aRows[ nLine-1 ].first + aRows[ nLine-1 ].second ) )
-                                    {
-                                        uno::Reference< table::XMergeableCell > xCellOwn( xCellRange->getCellByPosition( nColumn, nRow - 1 ), uno::UNO_QUERY_THROW );
-                                        uno::Reference< beans::XPropertySet > xPropSet2( xCellOwn, uno::UNO_QUERY_THROW );
-                                        table::BorderLine aBorderLine;
-                                        if ( xPropSet2->getPropertyValue( sBottomBorder ) >>= aBorderLine )
-                                            aCellBorder.maCellBorder = aBorderLine;
-                                        ImplCreateCellBorder( &aCellBorder, aCellBorder.mnPos,
-                                            nBottom, nRight, nBottom);
-                                    }
-                                    nRow=0;
+                                    uno::Reference< table::XMergeableCell > xCellOwn( xCellRange->getCellByPosition( nColumn, nRow - 1 ), uno::UNO_QUERY_THROW );
+                                    uno::Reference< beans::XPropertySet > xPropSet2( xCellOwn, uno::UNO_QUERY_THROW );
+                                    table::BorderLine aBorderLine;
+                                    if ( xPropSet2->getPropertyValue( sBottomBorder ) >>= aBorderLine )
+                                        aCellBorder.maCellBorder = aBorderLine;
+                                    ImplCreateCellBorder( &aCellBorder, aCellBorder.mnPos,
+                                        nBottom, nRight, nBottom);
                                 }
-                                else
-                                    nRow--;
+                                nRow=0;
                             }
+                            else
+                                nRow--;
                         }
                     }
                 }
+            }
 
-                // creating vertical lines
-                for( sal_Int32 nLine = 0; nLine < ( xColumns->getCount() + 1 ); nLine++ )
+            // creating vertical lines
+            for( sal_Int32 nLine = 0; nLine < ( xColumns->getCount() + 1 ); nLine++ )
+            {
+                for( sal_Int32 nRow = 0; nRow < xRows->getCount(); nRow++ )
                 {
-                    for( sal_Int32 nRow = 0; nRow < xRows->getCount(); nRow++ )
-                    {
 
-                        CellBorder aCellBorder;
-                        aCellBorder.mnPos = aRows[ nRow].first;
-                        aCellBorder.mnLength = aRows[ nRow].second;
-                        bool bLeft = false;
-                        if ( nLine < xColumns->getCount() )
-                        {   // left border
-                            uno::Reference< table::XMergeableCell > xCell( xCellRange->getCellByPosition( nLine, nRow ), uno::UNO_QUERY_THROW );
-                            if (!xCell->isMerged() )
-                            {
-                                uno::Reference< beans::XPropertySet > xCellSet( xCell, uno::UNO_QUERY_THROW );
-                                table::BorderLine aBorderLine;
-                                if ( xCellSet->getPropertyValue( sLeftBorder ) >>= aBorderLine )
-                                    aCellBorder.maCellBorder = aBorderLine;
-                                sal_Int32 nBottom = GetCellBottom( nRow, maRect, aRows,xCell );
-                                bLeft = ImplCreateCellBorder( &aCellBorder, aColumns[nLine].first, aCellBorder.mnPos,
-                                    aColumns[nLine].first, nBottom );
-                            }
+                    CellBorder aCellBorder;
+                    aCellBorder.mnPos = aRows[ nRow].first;
+                    aCellBorder.mnLength = aRows[ nRow].second;
+                    bool bLeft = false;
+                    if ( nLine < xColumns->getCount() )
+                    {   // left border
+                        uno::Reference< table::XMergeableCell > xCell( xCellRange->getCellByPosition( nLine, nRow ), uno::UNO_QUERY_THROW );
+                        if (!xCell->isMerged() )
+                        {
+                            uno::Reference< beans::XPropertySet > xCellSet( xCell, uno::UNO_QUERY_THROW );
+                            table::BorderLine aBorderLine;
+                            if ( xCellSet->getPropertyValue( sLeftBorder ) >>= aBorderLine )
+                                aCellBorder.maCellBorder = aBorderLine;
+                            sal_Int32 nBottom = GetCellBottom( nRow, maRect, aRows,xCell );
+                            bLeft = ImplCreateCellBorder( &aCellBorder, aColumns[nLine].first, aCellBorder.mnPos,
+                                aColumns[nLine].first, nBottom );
                         }
-                        if ( ( nLine && !bLeft )||(nLine == xColumns->getCount()))
-                        {   // right border
-                            sal_Int32 nColumn = nLine;
-                            while ( nColumn )
+                    }
+                    if ( ( nLine && !bLeft )||(nLine == xColumns->getCount()))
+                    {   // right border
+                        sal_Int32 nColumn = nLine;
+                        while ( nColumn )
+                        {
+                            uno::Reference< table::XMergeableCell > xCell( xCellRange->getCellByPosition( nColumn - 1, nRow ), uno::UNO_QUERY_THROW );
+                            if (!xCell->isMerged() )
                             {
-                                uno::Reference< table::XMergeableCell > xCell( xCellRange->getCellByPosition( nColumn - 1, nRow ), uno::UNO_QUERY_THROW );
-                                if (!xCell->isMerged() )
+                                sal_Int32 nRight  = GetCellRight( nColumn-1, maRect, aColumns,xCell );
+                                sal_Int32 nBottom = GetCellBottom( nRow,   maRect, aRows, xCell );
+                                if ( nRight == (aColumns[nLine-1].first + aColumns[nLine-1].second) )
                                 {
-                                    sal_Int32 nRight  = GetCellRight( nColumn-1, maRect, aColumns,xCell );
-                                    sal_Int32 nBottom = GetCellBottom( nRow,   maRect, aRows, xCell );
-                                    if ( nRight == (aColumns[nLine-1].first + aColumns[nLine-1].second) )
-                                    {
-                                        uno::Reference< table::XMergeableCell > xCellOwn( xCellRange->getCellByPosition( nColumn - 1, nRow ), uno::UNO_QUERY_THROW );
-                                        uno::Reference< beans::XPropertySet > xCellSet( xCellOwn, uno::UNO_QUERY_THROW );
-                                        table::BorderLine aBorderLine;
-                                        if ( xCellSet->getPropertyValue( sRightBorder ) >>= aBorderLine )
-                                            aCellBorder.maCellBorder = aBorderLine;
-                                        ImplCreateCellBorder( &aCellBorder, nRight, aCellBorder.mnPos,
-                                            nRight,  nBottom );
-                                    }
-                                    nColumn = 0;
+                                    uno::Reference< table::XMergeableCell > xCellOwn( xCellRange->getCellByPosition( nColumn - 1, nRow ), uno::UNO_QUERY_THROW );
+                                    uno::Reference< beans::XPropertySet > xCellSet( xCellOwn, uno::UNO_QUERY_THROW );
+                                    table::BorderLine aBorderLine;
+                                    if ( xCellSet->getPropertyValue( sRightBorder ) >>= aBorderLine )
+                                        aCellBorder.maCellBorder = aBorderLine;
+                                    ImplCreateCellBorder( &aCellBorder, nRight, aCellBorder.mnPos,
+                                        nRight,  nBottom );
                                 }
-                                else
-                                    nColumn --;
+                                nColumn = 0;
                             }
+                            else
+                                nColumn --;
                         }
                     }
                 }
commit 13df0c5a2f29f008c050fae1899ccb0eef93ad55
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Wed Apr 22 12:45:41 2015 +0100

    add missing include
    
    Change-Id: I9085ec6c3efeef25ebe50660cdf1c37a3ee85115

diff --git a/connectivity/source/drivers/mozab/MStatement.cxx b/connectivity/source/drivers/mozab/MStatement.cxx
index b76698f..d7130ff 100644
--- a/connectivity/source/drivers/mozab/MStatement.cxx
+++ b/connectivity/source/drivers/mozab/MStatement.cxx
@@ -47,6 +47,7 @@
 #include "MDatabaseMetaData.hxx"
 #include "resource/mozab_res.hrc"
 #include "resource/common_res.hrc"
+#include "sqlbison.hxx"
 
 #if OSL_DEBUG_LEVEL > 0
 # define OUtoCStr( x ) ( OUStringToOString ( (x), RTL_TEXTENCODING_ASCII_US).getStr())


More information about the Libreoffice-commits mailing list