sw/source/ui/table/tautofmt.cxx |   63 ++++++++++++++++++++++------------------
 1 file changed, 36 insertions(+), 27 deletions(-)

New commits:
commit 09cd784b800e448e7e8ad2b0d499a01236c978ea
Author: Cédric Bosdonnat <cedric.bosdonnat....@free.fr>
Date:   Tue Jul 23 17:53:36 2013 +0200

    More protection for pCurData: NULL means default, not much to do then
    
    Change-Id: Ied3a04a7b7be4f4f7b6174e3d6d2a6e53848afd0

diff --git a/sw/source/ui/table/tautofmt.cxx b/sw/source/ui/table/tautofmt.cxx
index c0f2bc9..bdb2478 100644
--- a/sw/source/ui/table/tautofmt.cxx
+++ b/sw/source/ui/table/tautofmt.cxx
@@ -89,7 +89,7 @@ private:
     void    PaintCells      ();
 
     sal_uInt8                GetFormatIndex( size_t nCol, size_t nRow ) const;
-    const SvxBoxItem&   GetBoxItem( size_t nCol, size_t nRow ) const;
+    const SvxBoxItem*   GetBoxItem( size_t nCol, size_t nRow ) const;
 
     void                DrawString( size_t nCol, size_t nRow );
     void                DrawStrings();
@@ -584,21 +584,23 @@ rCTLFont.MethodName( Value );
 
 void AutoFmtPreview::MakeFonts( sal_uInt8 nIndex, Font& rFont, Font& rCJKFont, 
Font& rCTLFont )
 {
-    const SwTableBoxFmt& rBoxFmt = *pCurData->GetBoxFmt( nIndex );
-
     rFont = rCJKFont = rCTLFont = GetFont();
     Size aFontSize( rFont.GetSize().Width(), 10 );
 
-    lcl_SetFontProperties( rFont, rBoxFmt.GetFont(), rBoxFmt.GetWeight(), 
rBoxFmt.GetPosture() );
-    lcl_SetFontProperties( rCJKFont, rBoxFmt.GetCJKFont(), 
rBoxFmt.GetCJKWeight(), rBoxFmt.GetCJKPosture() );
-    lcl_SetFontProperties( rCTLFont, rBoxFmt.GetCTLFont(), 
rBoxFmt.GetCTLWeight(), rBoxFmt.GetCTLPosture() );
-
-    SETONALLFONTS( SetUnderline,    
(FontUnderline)rBoxFmt.GetUnderline().GetValue() );
-    SETONALLFONTS( SetOverline,     
(FontUnderline)rBoxFmt.GetOverline().GetValue() );
-    SETONALLFONTS( SetStrikeout,    
(FontStrikeout)rBoxFmt.GetCrossedOut().GetValue() );
-    SETONALLFONTS( SetOutline,      rBoxFmt.GetContour().GetValue() );
-    SETONALLFONTS( SetShadow,       rBoxFmt.GetShadowed().GetValue() );
-    SETONALLFONTS( SetColor,        rBoxFmt.GetColor().GetValue() );
+    if ( pCurData )
+    {
+        const SwTableBoxFmt& rBoxFmt = *pCurData->GetBoxFmt( nIndex );
+        lcl_SetFontProperties( rFont, rBoxFmt.GetFont(), rBoxFmt.GetWeight(), 
rBoxFmt.GetPosture() );
+        lcl_SetFontProperties( rCJKFont, rBoxFmt.GetCJKFont(), 
rBoxFmt.GetCJKWeight(), rBoxFmt.GetCJKPosture() );
+        lcl_SetFontProperties( rCTLFont, rBoxFmt.GetCTLFont(), 
rBoxFmt.GetCTLWeight(), rBoxFmt.GetCTLPosture() );
+
+        SETONALLFONTS( SetUnderline,    
(FontUnderline)rBoxFmt.GetUnderline().GetValue() );
+        SETONALLFONTS( SetOverline,     
(FontUnderline)rBoxFmt.GetOverline().GetValue() );
+        SETONALLFONTS( SetStrikeout,    
(FontStrikeout)rBoxFmt.GetCrossedOut().GetValue() );
+        SETONALLFONTS( SetOutline,      rBoxFmt.GetContour().GetValue() );
+        SETONALLFONTS( SetShadow,       rBoxFmt.GetShadowed().GetValue() );
+        SETONALLFONTS( SetColor,        rBoxFmt.GetColor().GetValue() );
+    }
     SETONALLFONTS( SetSize,         aFontSize );
     SETONALLFONTS( SetTransparent,  sal_True );
 }
@@ -616,9 +618,12 @@ sal_uInt8 AutoFmtPreview::GetFormatIndex( size_t nCol, 
size_t nRow ) const
     return pnFmtMap[ maArray.GetCellIndex( nCol, nRow, mbRTL ) ];
 }
 
-const SvxBoxItem& AutoFmtPreview::GetBoxItem( size_t nCol, size_t nRow ) const
+const SvxBoxItem* AutoFmtPreview::GetBoxItem( size_t nCol, size_t nRow ) const
 {
-    return pCurData->GetBoxFmt( GetFormatIndex( nCol, nRow ) )->GetBox();
+    if ( pCurData )
+        return &pCurData->GetBoxFmt( GetFormatIndex( nCol, nRow ) )->GetBox();
+    else
+        return NULL;
 }
 
 void AutoFmtPreview::DrawString( size_t nCol, size_t nRow )
@@ -664,7 +669,7 @@ void AutoFmtPreview::DrawString( size_t nCol, size_t nRow )
         case 23:    nVal = 39; nNum = 13;   goto MAKENUMSTR;
         case 24:    nVal = 108; nNum = 15;  goto MAKENUMSTR;
 MAKENUMSTR:
-            if( pCurData->IsValueFormat() )
+            if( pCurData && pCurData->IsValueFormat() )
             {
                 String sFmt; LanguageType eLng, eSys;
                 pCurData->GetBoxFmt( (sal_uInt8)nNum )->GetValueFormat( sFmt, 
eLng, eSys );
@@ -693,7 +698,7 @@ MAKENUMSTR:
 
         Size theMaxStrSize( cellRect.GetWidth() - FRAME_OFFSET,
                             cellRect.GetHeight() - FRAME_OFFSET );
-        if( pCurData->IsFont() )
+        if( pCurData && pCurData->IsFont() )
         {
             Font aFont, aCJKFont, aCTLFont;
             MakeFonts( nFmtIndex, aFont, aCJKFont, aCTLFont );
@@ -705,7 +710,7 @@ MAKENUMSTR:
         aScriptedText.SetText( cellString, m_xBreak );
         aStrSize = aScriptedText.GetTextSize();
 
-        if( pCurData->IsFont() &&
+        if( pCurData && pCurData->IsFont() &&
             theMaxStrSize.Height() < aStrSize.Height() )
         {
                 // If the string in this font does not
@@ -733,7 +738,7 @@ MAKENUMSTR:
         // horizontal
         if( mbRTL )
             aPos.X() += nRightX;
-        else if (pCurData->IsJustify())
+        else if (pCurData && pCurData->IsJustify())
         {
             sal_uInt16 nHorPos = (sal_uInt16)
                     ((cellRect.GetWidth()-aStrSize.Width())/2);
@@ -799,14 +804,14 @@ void AutoFmtPreview::DrawBackground()
 void AutoFmtPreview::PaintCells()
 {
     // 1) background
-    if ( pCurData->IsBackground() )
+    if ( pCurData && pCurData->IsBackground() )
         DrawBackground();
 
     // 2) values
     DrawStrings();
 
     // 3) border
-    if ( pCurData->IsFrame() )
+    if ( pCurData && pCurData->IsFrame() )
         maArray.DrawArray( aVD );
 }
 
@@ -846,14 +851,18 @@ void AutoFmtPreview::CalcLineMap()
         {
             svx::frame::Style aStyle;
 
-            const SvxBoxItem& rItem = GetBoxItem( nCol, nRow );
-            lclSetStyleFromBorder( aStyle, rItem.GetLeft() );
+            const SvxBoxItem* pItem = GetBoxItem( nCol, nRow );
+            if ( pItem )
+                lclSetStyleFromBorder( aStyle, pItem->GetLeft() );
             maArray.SetCellStyleLeft( nCol, nRow, aStyle );
-            lclSetStyleFromBorder( aStyle, rItem.GetRight() );
+            if ( pItem )
+                lclSetStyleFromBorder( aStyle, pItem->GetRight() );
             maArray.SetCellStyleRight( nCol, nRow, aStyle );
-            lclSetStyleFromBorder( aStyle, rItem.GetTop() );
+            if ( pItem )
+                lclSetStyleFromBorder( aStyle, pItem->GetTop() );
             maArray.SetCellStyleTop( nCol, nRow, aStyle );
-            lclSetStyleFromBorder( aStyle, rItem.GetBottom() );
+            if ( pItem )
+                lclSetStyleFromBorder( aStyle, pItem->GetBottom() );
             maArray.SetCellStyleBottom( nCol, nRow, aStyle );
 
 // FIXME - uncomment to draw diagonal borders
@@ -868,7 +877,7 @@ void AutoFmtPreview::CalcLineMap()
 void AutoFmtPreview::NotifyChange( const SwTableAutoFmt& rNewData )
 {
     pCurData  = const_cast< SwTableAutoFmt* >( &rNewData );
-    bFitWidth = pCurData->IsJustify();//sal_True;  //???
+    bFitWidth = pCurData && pCurData->IsJustify();//sal_True;  //???
     CalcCellArray( bFitWidth );
     CalcLineMap();
     DoPaint( Rectangle( Point(0,0), GetSizePixel() ) );
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to