[ooo-build-commit] .: patches/dev300

Kohei Yoshida kohei at kemper.freedesktop.org
Mon Oct 4 18:58:55 PDT 2010


 patches/dev300/apply                              |    3 
 patches/dev300/calc-xls-import-mem-footprint.diff |  737 ----------------------
 2 files changed, 740 deletions(-)

New commits:
commit 75976d104f9e3296848d6559e9e1d0aedfcf1313
Author: Kohei Yoshida <kyoshida at novell.com>
Date:   Mon Oct 4 21:58:10 2010 -0400

    Removed calc-xls-import-mem-footprint.diff; moved to git.

diff --git a/patches/dev300/apply b/patches/dev300/apply
index 90ca713..c196e2c 100644
--- a/patches/dev300/apply
+++ b/patches/dev300/apply
@@ -2704,9 +2704,6 @@ calc-dp-sort-fix.diff, n#629920, kohei
 calc-extref-interpreter-rework-formula.diff, n#628876, kohei
 calc-extref-interpreter-rework-sc.diff,      n#628876, kohei
 
-# Reduce memory footprint per sheet during import of xls document.
-calc-xls-import-mem-footprint.diff, n#637925, kohei
-
 [ GentooExperimental ]
 SectionOwner => hmth
 # make Python2 optional
diff --git a/patches/dev300/calc-xls-import-mem-footprint.diff b/patches/dev300/calc-xls-import-mem-footprint.diff
deleted file mode 100644
index 181e768..0000000
--- a/patches/dev300/calc-xls-import-mem-footprint.diff
+++ /dev/null
@@ -1,737 +0,0 @@
-diff --git sc/inc/document.hxx sc/inc/document.hxx
-index e59bdee..0e01558 100644
---- sc/inc/document.hxx
-+++ sc/inc/document.hxx
-@@ -1298,13 +1298,14 @@ public:
-     void			DeleteSelectionTab( SCTAB nTab, USHORT nDelFlag, const ScMarkData& rMark );
- 
-     SC_DLLPUBLIC void           SetColWidth( SCCOL nCol, SCTAB nTab, USHORT nNewWidth );
-+    SC_DLLPUBLIC void			SetColWidthOnly( SCCOL nCol, SCTAB nTab, USHORT nNewWidth );
-     SC_DLLPUBLIC void           SetRowHeight( SCROW nRow, SCTAB nTab, USHORT nNewHeight );
-     SC_DLLPUBLIC void           SetRowHeightRange( SCROW nStartRow, SCROW nEndRow, SCTAB nTab,
-                                             USHORT nNewHeight );
- 
-     SC_DLLPUBLIC void           SetRowHeightOnly( SCROW nStartRow, SCROW nEndRow, SCTAB nTab,
-                                                   USHORT nNewHeight );
--    void                        SetManualHeight( SCROW nStartRow, SCROW nEndRow, SCTAB nTab, BOOL bManual );
-+    SC_DLLPUBLIC void           SetManualHeight( SCROW nStartRow, SCROW nEndRow, SCTAB nTab, BOOL bManual );
- 
-     SC_DLLPUBLIC USHORT         GetColWidth( SCCOL nCol, SCTAB nTab ) const;
-     SC_DLLPUBLIC USHORT         GetRowHeight( SCROW nRow, SCTAB nTab, bool bHiddenAsZero = true ) const;
-diff --git sc/inc/table.hxx sc/inc/table.hxx
-index db8f171..faf3058 100644
---- sc/inc/table.hxx
-+++ sc/inc/table.hxx
-@@ -622,6 +622,7 @@ public:
-                                     const Fraction& rZoomX, const Fraction& rZoomY,
-                                     BOOL bWidth, BOOL bTotalSize );
-     void		SetColWidth( SCCOL nCol, USHORT nNewWidth );
-+    void        SetColWidthOnly( SCCOL nCol, USHORT nNewWidth );
-     void		SetRowHeight( SCROW nRow, USHORT nNewHeight );
-     BOOL		SetRowHeightRange( SCROW nStartRow, SCROW nEndRow, USHORT nNewHeight,
-                                     double nPPTX, double nPPTY );
-diff --git sc/source/core/data/document.cxx sc/source/core/data/document.cxx
-index 790c40b..01fbaa2 100644
---- sc/source/core/data/document.cxx
-+++ sc/source/core/data/document.cxx
-@@ -3201,6 +3201,11 @@ void ScDocument::SetColWidth( SCCOL nCol, SCTAB nTab, USHORT nNewWidth )
-         pTab[nTab]->SetColWidth( nCol, nNewWidth );
- }
- 
-+void ScDocument::SetColWidthOnly( SCCOL nCol, SCTAB nTab, USHORT nNewWidth )
-+{
-+    if ( ValidTab(nTab) && pTab[nTab] )
-+        pTab[nTab]->SetColWidthOnly( nCol, nNewWidth );
-+}
- 
- void ScDocument::SetRowHeight( SCROW nRow, SCTAB nTab, USHORT nNewHeight )
- {
-diff --git sc/source/core/data/table2.cxx sc/source/core/data/table2.cxx
-index 5c85eeb..194d80e 100644
---- sc/source/core/data/table2.cxx
-+++ sc/source/core/data/table2.cxx
-@@ -2143,6 +2143,17 @@ void ScTable::SetColWidth( SCCOL nCol, USHORT nNewWidth )
-     }
- }
- 
-+void ScTable::SetColWidthOnly( SCCOL nCol, USHORT nNewWidth )
-+{
-+    if (!VALIDCOL(nCol) || !pColWidth)
-+        return;
-+
-+    if (!nNewWidth)
-+        nNewWidth = STD_COL_WIDTH;
-+
-+    if (nNewWidth != pColWidth[nCol])
-+        pColWidth[nCol] = nNewWidth;
-+}
- 
- void ScTable::SetRowHeight( SCROW nRow, USHORT nNewHeight )
- {
-diff --git sc/source/filter/excel/colrowst.cxx sc/source/filter/excel/colrowst.cxx
-index b62ebea..745d60a 100644
---- sc/source/filter/excel/colrowst.cxx
-+++ sc/source/filter/excel/colrowst.cxx
-@@ -58,8 +58,9 @@ XclImpColRowSettings::XclImpColRowSettings( const XclImpRoot& rRoot ) :
-     XclImpRoot( rRoot ),
-     maWidths( MAXCOLCOUNT, 0 ),
-     maColFlags( MAXCOLCOUNT, 0 ),
--    maHeights( MAXROWCOUNT, 0 ),
--    maRowFlags( MAXROWCOUNT, 0 ),
-+    maRowHeights(0, MAXROWCOUNT, 0),
-+    maRowFlags(0, MAXROWCOUNT, 0),
-+    maHiddenRows(0, MAXROWCOUNT, false),
-     mnLastScRow( -1 ),
-     mnDefWidth( STD_COL_WIDTH ),
-     mnDefHeight( static_cast< sal_uInt16 >( STD_ROW_HEIGHT ) ),
-@@ -134,38 +135,59 @@ void XclImpColRowSettings::SetDefHeight( sal_uInt16 nDefHeight, sal_uInt16 nFlag
- 
- void XclImpColRowSettings::SetHeight( SCROW nScRow, sal_uInt16 nHeight )
- {
--    if( ValidRow( nScRow ) )
--    {
--        sal_uInt16 nRawHeight = nHeight & EXC_ROW_HEIGHTMASK;
--        bool bDefHeight = ::get_flag( nHeight, EXC_ROW_FLAGDEFHEIGHT ) || (nRawHeight == 0);
--        maHeights[ nScRow ] = nRawHeight;
--        sal_uInt8& rnFlags = maRowFlags[ nScRow ];
--        ::set_flag( rnFlags, EXC_COLROW_USED );
--        if( !bDefHeight && (nRawHeight == 0) )
--            ::set_flag( rnFlags, EXC_COLROW_HIDDEN );
--        ::set_flag( rnFlags, EXC_COLROW_DEFAULT, bDefHeight );
--        if( nScRow > mnLastScRow )
--            mnLastScRow = nScRow;
--    }
-+    if (!ValidRow(nScRow))
-+        return;
-+
-+    sal_uInt16 nRawHeight = nHeight & EXC_ROW_HEIGHTMASK;
-+    bool bDefHeight = ::get_flag( nHeight, EXC_ROW_FLAGDEFHEIGHT ) || (nRawHeight == 0);
-+    maRowHeights.insert_back(nScRow, nScRow+1, nRawHeight);
-+    sal_uInt8 nFlagVal = 0;
-+    if (!maRowFlags.search(nScRow, nFlagVal))
-+        return;
-+
-+    ::set_flag(nFlagVal, EXC_COLROW_USED);
-+    ::set_flag(nFlagVal, EXC_COLROW_DEFAULT, bDefHeight);
-+
-+    if (!bDefHeight && nRawHeight == 0)
-+        maHiddenRows.insert_back(nScRow, nScRow+1, true);
-+
-+    maRowFlags.insert_back(nScRow, nScRow+1, nFlagVal);
-+
-+    if (nScRow > mnLastScRow)
-+        mnLastScRow = nScRow;
- }
- 
- void XclImpColRowSettings::SetRowSettings( SCROW nScRow, sal_uInt16 nHeight, sal_uInt16 nFlags )
- {
--    if( ValidRow( nScRow ) )
--    {
--        SetHeight( nScRow, nHeight );
--        sal_uInt8& rnFlags = maRowFlags[ nScRow ];
--        if( ::get_flag( nFlags, EXC_ROW_UNSYNCED ) )
--            ::set_flag( rnFlags, EXC_COLROW_MAN );
--        if( ::get_flag( nFlags, EXC_ROW_HIDDEN ) )
--            ::set_flag( rnFlags, EXC_COLROW_HIDDEN );
--    }
-+    if (!ValidRow(nScRow))
-+        return;
-+
-+    SetHeight(nScRow, nHeight);
-+
-+    sal_uInt8 nFlagVal = 0;
-+    if (!maRowFlags.search(nScRow, nFlagVal))
-+        return;
-+
-+    if (::get_flag(nFlags, EXC_ROW_UNSYNCED))
-+        ::set_flag(nFlagVal, EXC_COLROW_MAN);
-+
-+    maRowFlags.insert_back(nScRow, nScRow+1, nFlagVal);
-+
-+    if (::get_flag(nFlags, EXC_ROW_HIDDEN))
-+        maHiddenRows.insert_back(nScRow, nScRow+1, true);
- }
- 
- void XclImpColRowSettings::SetManualRowHeight( SCROW nScRow )
- {
--    if( ValidRow( nScRow ) )
--        ::set_flag( maRowFlags[ nScRow ], EXC_COLROW_MAN );
-+    if (!ValidRow(nScRow))
-+        return;
-+
-+    sal_uInt8 nFlagVal = 0;
-+    if (!maRowFlags.search(nScRow, nFlagVal))
-+        return;
-+
-+    ::set_flag(nFlagVal, EXC_COLROW_MAN);
-+    maRowFlags.insert_back(nScRow, nScRow+1, nFlagVal);
- }
- 
- void XclImpColRowSettings::SetDefaultXF( SCCOL nScCol1, SCCOL nScCol2, sal_uInt16 nXFIndex )
-@@ -201,7 +223,7 @@ void XclImpColRowSettings::Convert( SCTAB nScTab )
-             ::set_flag( maColFlags[ nScCol ], EXC_COLROW_HIDDEN );
-             nWidth = mnDefWidth;
-         }
--        rDoc.SetColWidth( nScCol, nScTab, nWidth );
-+        rDoc.SetColWidthOnly( nScCol, nScTab, nWidth );
-     }
- 
-     // row heights ------------------------------------------------------------
-@@ -213,62 +235,64 @@ void XclImpColRowSettings::Convert( SCTAB nScTab )
-         rDoc.SetRowFlags( 0, MAXROW, nScTab, CR_MANUALSIZE );
-     bool bDefHideRow = ::get_flag( mnDefRowFlags, EXC_DEFROW_HIDDEN );
- 
--    SCROW nFirstScRow = -1;
--    sal_uInt16 nLastHeight = 0;
--    for( SCROW nScRow = 0; nScRow <= mnLastScRow ; ++nScRow )
-+    maRowHeights.build_tree();
-+    if (!maRowHeights.is_tree_valid())
-+        return;
-+
-+    RowFlagsType::const_iterator itrFlags = maRowFlags.begin(), itrFlagsEnd = maRowFlags.end();
-+    SCROW nPrevRow = -1;
-+    sal_uInt8 nPrevFlags = 0;
-+    sal_uInt16 nPrevHeight = 0;
-+    for (; itrFlags != itrFlagsEnd; ++itrFlags)
-     {
--        // get height and hidden state from cached data
--        sal_uInt8 nFlags = maRowFlags[ nScRow ];
--        sal_uInt16 nHeight = 0;
--        bool bHideRow = false;
--        if( ::get_flag( nFlags, EXC_COLROW_USED ) )
-+        SCROW nRow = itrFlags->first;
-+        sal_uInt8 nFlags = itrFlags->second;
-+        if (nPrevRow >= 0)
-         {
--            if( ::get_flag( nFlags, EXC_COLROW_DEFAULT ) )
--            {
--                nHeight = mnDefHeight;
--                bHideRow = bDefHideRow;
--            }
--            else
-+            sal_uInt16 nHeight = 0;
-+
-+            if (::get_flag(nPrevFlags, EXC_COLROW_USED))
-             {
--                nHeight = maHeights[ nScRow ];
--                if( nHeight == 0 )
-+                if (::get_flag(nPrevFlags, EXC_COLROW_DEFAULT))
-                 {
-                     nHeight = mnDefHeight;
--                    bHideRow = true;
-+                    rDoc.SetRowHeightOnly(nPrevRow, nRow-1, nScTab, nHeight);
-+                }
-+                else
-+                {
-+                    for (SCROW i = nPrevRow; i <= nRow - 1; ++i)
-+                    {
-+                        SCROW nLast;
-+                        if (!maRowHeights.search_tree(i, nHeight, NULL, &nLast))
-+                        {
-+                            // search failed for some reason
-+                            return;
-+                        }
-+
-+                        if (nLast > nRow)
-+                            nLast = nRow;
-+
-+                        rDoc.SetRowHeightOnly(i, nLast-1, nScTab, nHeight);
-+                        i = nLast-1;
-+                        nPrevHeight = nHeight;
-+                    }
-                 }
--            }
- 
--            if( ::get_flag( nFlags, EXC_COLROW_MAN ) )
--                rDoc.SetRowFlags( nScRow, nScTab, rDoc.GetRowFlags( nScRow, nScTab ) | CR_MANUALSIZE );
--        }
--        else
--        {
--            nHeight = mnDefHeight;
--            bHideRow = bDefHideRow;
-+                if (::get_flag(nPrevFlags, EXC_COLROW_MAN))
-+                    rDoc.SetManualHeight(nPrevRow, nRow-1, nScTab, true);
-+            }
-+            else
-+            {
-+                nHeight = mnDefHeight;
-+                rDoc.SetRowHeightOnly(nPrevRow, nRow-1, nScTab, nHeight);
-+            }
-+            nPrevHeight = nHeight;
-         }
- 
--        /*  Hidden rows: remember hidden state, but do not set hidden state in
--            document here. Needed for #i11776#, no HIDDEN flags in the document,
--            until filters and outlines are inserted. */
--        if( bHideRow )
--            ::set_flag( maRowFlags[ nScRow ], EXC_COLROW_HIDDEN );
--
--        // set height range
--        if( (nLastHeight != nHeight) || (nScRow == 0) )
--        {
--            DBG_ASSERT( (nScRow == 0) || (nFirstScRow >= 0), "XclImpColRowSettings::Convert - algorithm error" );
--            if( nScRow > 0 )
--                rDoc.SetRowHeightOnly( nFirstScRow, nScRow - 1, nScTab, nLastHeight );
--
--            nFirstScRow = nScRow;
--            nLastHeight = nHeight;
--        }
-+        nPrevRow = nRow;
-+        nPrevFlags = nFlags;
-     }
- 
--    // set row height of last portion
--    if( mnLastScRow >= 0 )
--        rDoc.SetRowHeightOnly( nFirstScRow, mnLastScRow, nScTab, nLastHeight );
--
-     // ------------------------------------------------------------------------
- 
-     mbDirty = false;
-@@ -298,17 +322,41 @@ void XclImpColRowSettings::ConvertHiddenFlags( SCTAB nScTab )
-         }
-     }
- 
--    // hide the rows
--    for( SCROW nScRow = 0; nScRow <= mnLastScRow; ++nScRow )
-+    // In case the excel row limit is lower than calc's, use the visibility of
-+    // the last row and extend it to calc's last row.
-+    SCROW nLastXLRow = GetRoot().GetXclMaxPos().Row();
-+    if (nLastXLRow < MAXROW)
-     {
--        if( ::get_flag( maRowFlags[ nScRow ], EXC_COLROW_HIDDEN ) )
-+        bool bHidden = false;
-+        if (!maHiddenRows.search(nLastXLRow, bHidden))
-+            return;
-+    
-+        maHiddenRows.insert_back(nLastXLRow, MAXROWCOUNT, bHidden);
-+    }
-+
-+    SCROW nPrevRow = -1;
-+    bool bPrevHidden = false;
-+    RowHiddenType::const_iterator itr = maHiddenRows.begin(), itrEnd = maHiddenRows.end();
-+    for (; itr != itrEnd; ++itr)
-+    {
-+        SCROW nRow = itr->first;
-+        bool bHidden = itr->second;
-+        if (nPrevRow >= 0)
-         {
--            // hide the row
--            rDoc.ShowRow( nScRow, nScTab, FALSE );
--            // #i38093# rows hidden by filter need extra flag
--            if( (nFirstFilterScRow <= nScRow) && (nScRow <= nLastFilterScRow) )
--                rDoc.SetRowFiltered(nScRow, nScRow, nScTab, true);
-+            if (bPrevHidden)
-+            {
-+                rDoc.ShowRows(nPrevRow, nRow-1, nScTab, false);
-+                // #i38093# rows hidden by filter need extra flag
-+                if (nFirstFilterScRow <= nPrevRow && nPrevRow <= nLastFilterScRow)
-+                {
-+                    SCROW nLast = ::std::min(nRow-1, nLastFilterScRow);
-+                    rDoc.SetRowFiltered(nPrevRow, nLast, nScTab, true);
-+                }
-+            }
-         }
-+
-+        nPrevRow = nRow;
-+        bPrevHidden = bHidden;
-     }
- 
-     // #i47438# if default row format is hidden, hide remaining rows
-diff --git sc/source/filter/excel/exctools.cxx sc/source/filter/excel/exctools.cxx
-index c6a5e5e..a37ff1b 100644
---- sc/source/filter/excel/exctools.cxx
-+++ sc/source/filter/excel/exctools.cxx
-@@ -59,6 +59,8 @@
- #include "xilink.hxx"
- #include "xecontent.hxx"
- 
-+#include <vector>
-+
- // - ALLGEMEINE ----------------------------------------------------------
- 
- RootData::RootData( void )
-@@ -91,192 +93,93 @@ RootData::~RootData()
- }
- 
- 
--
--
--XclImpOutlineBuffer::XclImpOutlineBuffer( SCSIZE nNewSize )
-+XclImpOutlineBuffer::XclImpOutlineBuffer( SCSIZE nNewSize ) :
-+    maLevels(0, nNewSize, 0),
-+    mpOutlineArray(NULL),
-+    mnMaxLevel(0),
-+    mbButtonAfter(true)
- {
--    DBG_ASSERT( nNewSize > 0, "-OutlineBuffer::Ctor: nNewSize == 0!" );
--
--    nSize = nNewSize + 1;
--    pLevel = new BYTE[ nSize ];
--    pOuted = new BOOL[ nSize ];
--    pHidden = new BOOL[ nSize ];
--    pOutlineArray = NULL;
--
--    Reset();
- }
- 
--
- XclImpOutlineBuffer::~XclImpOutlineBuffer()
- {
--    delete[] pLevel;
--    delete[] pOuted;
--    delete[] pHidden;
- }
- 
--
--void XclImpOutlineBuffer::SetLevel( SCSIZE nIndex, BYTE nVal, BOOL bOuted, BOOL bHidden )
-+void XclImpOutlineBuffer::SetLevel( SCSIZE nIndex, sal_uInt8 nVal, bool bCollapsed )
- {
--    if( nIndex < nSize )
--    {
--        pLevel[ nIndex ] = nVal;
--        pOuted[ nIndex ] = bOuted;
--        pHidden[ nIndex ] = bHidden;
--
--        if( nIndex > nLast )
--            nLast = nIndex;
--        if( nVal > nMaxLevel )
--            nMaxLevel = nVal;
--    }
-+    maLevels.insert_back(nIndex, nIndex+1, nVal);
-+    if (nVal > mnMaxLevel)
-+        mnMaxLevel = nVal;
-+    if (bCollapsed)
-+        maCollapsedPosSet.insert(nIndex);
- }
- 
--
- void XclImpOutlineBuffer::SetOutlineArray( ScOutlineArray* pOArray )
- {
--    pOutlineArray = pOArray;
-+    mpOutlineArray = pOArray;
- }
- 
--
--// transtorm xcl-outline into SC-outline
--void XclImpOutlineBuffer::MakeScOutline( void )
-+void XclImpOutlineBuffer::MakeScOutline()
- {
--    if( !pOutlineArray || !HasOutline() )
-+    if (!mpOutlineArray)
-         return;
- 
--    const UINT16	nNumLev			= 8;
--    BOOL			bPreOutedLevel	= FALSE;
--    BYTE			nCurrLevel		= 0;
--    BOOL			bMakeHidden[ nNumLev ];
--    BOOL			bMakeVisible[ nNumLev + 1 ];
--
--    sal_uInt16 nLevel;
--    for( nLevel = 0; nLevel < nNumLev; ++nLevel )
--        bMakeHidden[ nLevel ] = FALSE;
--    for( nLevel = 0; nLevel <= nNumLev; ++nLevel )
--        bMakeVisible[ nLevel ] = TRUE;
--    if( nLast < (nSize - 1) )
--        nLast++;
--
--    // search for hidden attributes at end of level, move them to begin
--    if( bButtonNormal )
-+    ::std::vector<sal_uInt8> aOutlineStack;
-+    aOutlineStack.reserve(mnMaxLevel);
-+    OutlineLevels::const_iterator itr = maLevels.begin(), itr_end = maLevels.end();
-+    for (; itr != itr_end; ++itr)
-     {
--        for( BYTE nWorkLevel = 1; nWorkLevel <= nMaxLevel; nWorkLevel++ )
-+        SCSIZE nPos = itr->first;
-+        sal_uInt8 nLevel = itr->second;
-+        sal_uInt8 nCurLevel = static_cast<sal_uInt8>(aOutlineStack.size());
-+        if (nLevel > nCurLevel)
-         {
--            UINT16	nStartPos       = 0;
--            BYTE    nCurrLevel2 = 0;
--            BYTE	nPrevLevel	= 0;
--
--            for( SCSIZE nC = 0 ; nC <= nLast ; nC++ )
-+            for (sal_uInt8 i = 0; i < nLevel - nCurLevel; ++i)
-+                aOutlineStack.push_back(nPos);
-+        }
-+        else
-+        {
-+            DBG_ASSERT(nLevel < nCurLevel, "XclImpOutlineBuffer::MakeScOutline: unexpected level!");
-+            for (sal_uInt8 i = 0; i < nCurLevel - nLevel; ++i)
-             {
--                nPrevLevel = nCurrLevel2;
--                nCurrLevel2 = pLevel[ nC ];
--                if( (nPrevLevel < nWorkLevel) && (nCurrLevel2 >= nWorkLevel) )
--                    nStartPos = static_cast< sal_uInt16 >( nC );
--                else if( (nPrevLevel >= nWorkLevel) && (nCurrLevel2 < nWorkLevel) )
-+                if (aOutlineStack.empty())
-                 {
--                    if( pOuted[ nC ] && pHidden[ nStartPos ] )
--                    {
--                        if( nStartPos )
--                            pOuted[ nStartPos - 1 ] = TRUE;
--                        else
--                            bPreOutedLevel = TRUE;
--                        pOuted[ nC ] = FALSE;
--                    }
-+                    // Something is wrong.
-+                    return;
-                 }
-+                SCSIZE nFirstPos = aOutlineStack.back();
-+                sal_uInt8 nThisLevel = static_cast<sal_uInt8>(aOutlineStack.size());
-+                aOutlineStack.pop_back();
-+                bool bCollapsed = false;
-+                if (mbButtonAfter)
-+                    bCollapsed = maCollapsedPosSet.count(nPos) > 0;
-+                else if (nFirstPos > 0)
-+                    bCollapsed = maCollapsedPosSet.count(nFirstPos-1) > 0;
-+
-+                BOOL bDummy;
-+                mpOutlineArray->Insert(nFirstPos, nPos-1, bDummy, bCollapsed);
-             }
-         }
-     }
--    else
--        bPreOutedLevel = pHidden[ 0 ];
--
--    // generate SC outlines
--    UINT16	nPrevC;
--    UINT16	nStart[ nNumLev ];
--    BOOL	bDummy;
--    BOOL	bPrevOuted	= bPreOutedLevel;
--    BOOL	bCurrHidden = FALSE;
--    BOOL	bPrevHidden = FALSE;
--
--    for( SCSIZE nC = 0; nC <= nLast; nC++ )
--    {
--        BYTE nWorkLevel = pLevel[ nC ];
--
--        nPrevC      = static_cast< sal_uInt16 >( nC ? nC - 1 : 0 );
--        bPrevHidden	= bCurrHidden;
--        bCurrHidden	= pHidden[ nC ];
--
--        // open new levels
--        while( nWorkLevel > nCurrLevel )
--        {
--            nCurrLevel++;
--            bMakeHidden[ nCurrLevel ] = bPrevOuted;
--            bMakeVisible[ nCurrLevel + 1 ] =
--                bMakeVisible[ nCurrLevel ] && !bMakeHidden[ nCurrLevel ];
--            nStart[ nCurrLevel ] = static_cast< sal_uInt16 >( nC );
--        }
--        // close levels
--        while( nWorkLevel < nCurrLevel )
--        {
--            BOOL bLastLevel		= (nWorkLevel == (nCurrLevel - 1));
--            BOOL bRealHidden	= (bMakeHidden[ nCurrLevel ] && bPrevHidden );
--            BOOL bRealVisible	= (bMakeVisible[ nCurrLevel ] ||
--                                    (!bCurrHidden && bLastLevel));
--
--            pOutlineArray->Insert( nStart[ nCurrLevel ], nPrevC , bDummy,
--                bRealHidden, bRealVisible );
--            nCurrLevel--;
--        }
--
--        bPrevOuted = pOuted[ nC ];
--    }
- }
- 
--
--void XclImpOutlineBuffer::SetLevelRange( SCSIZE nF, SCSIZE nL, BYTE nVal,
--                                    BOOL bOuted, BOOL bHidden )
-+void XclImpOutlineBuffer::SetLevelRange( SCSIZE nF, SCSIZE nL, sal_uInt8 nVal, bool bCollapsed )
- {
--    DBG_ASSERT( nF <= nL, "+OutlineBuffer::SetLevelRange(): Last < First!" );
--
--    if( nL < nSize )
--    {
--        if( nL > nLast )
--            nLast = nL;
--
--        BYTE*	pLevelCount;
--        BYTE*	pLast;
--        BOOL*	pOutedCount;
--        BOOL*	pHiddenCount;
-+    if (nF > nL)
-+        // invalid range
-+        return;
- 
--        pLevelCount = &pLevel[ nF ];
--        pLast = &pLevel[ nL ];
--        pOutedCount = &pOuted[ nF ];
--        pHiddenCount = &pHidden[ nF ];
-+    maLevels.insert_back(nF, nL+1, nVal);
- 
--        while( pLevelCount <= pLast )
--        {
--            *( pLevelCount++ ) = nVal;
--            *( pOutedCount++ ) = bOuted;
--            *( pHiddenCount++ ) = bHidden;
--        }
--
--        if( nVal > nMaxLevel )
--            nMaxLevel = nVal;
--    }
-+    if (bCollapsed)
-+        maCollapsedPosSet.insert(nF);
- }
- 
--
--void XclImpOutlineBuffer::Reset( void )
-+void XclImpOutlineBuffer::SetButtonMode( bool bRightOrUnder )
- {
--    for( SCSIZE nC = 0 ; nC < nSize ; nC++  )
--    {
--        pLevel[ nC ] = 0;
--        pOuted[ nC ] = pHidden[ nC ] = FALSE;
--    }
--    nLast = 0;
--    nMaxLevel = 0;
-+    mbButtonAfter = bRightOrUnder;
- }
- 
--
- //___________________________________________________________________
- 
- 
-diff --git sc/source/filter/excel/impop.cxx sc/source/filter/excel/impop.cxx
-index 16060ba..8dd0258 100644
---- sc/source/filter/excel/impop.cxx
-+++ sc/source/filter/excel/impop.cxx
-@@ -405,9 +405,7 @@ void ImportExcel::Row25( void )
-             aIn >> nGrbit;
- 
-             sal_uInt8 nLevel = ::extract_value< sal_uInt8 >( nGrbit, 0, 3 );
--            pRowOutlineBuff->SetLevel( nRow, nLevel,
--                ::get_flag( nGrbit, EXC_ROW_COLLAPSED ), ::get_flag( nGrbit, EXC_ROW_HIDDEN ) );
--
-+            pRowOutlineBuff->SetLevel( nRow, nLevel, ::get_flag( nGrbit, EXC_ROW_COLLAPSED ) );
-             pColRowBuff->SetRowSettings( nRow, nRowHeight, nGrbit );
-         }
-     }
-@@ -668,7 +666,7 @@ void ImportExcel::Colinfo( void )
-     bool bHidden = ::get_flag( nOpt, EXC_COLINFO_HIDDEN );
-     bool bCollapsed = ::get_flag( nOpt, EXC_COLINFO_COLLAPSED );
-     sal_uInt8 nLevel = ::extract_value< sal_uInt8 >( nOpt, 8, 3 );
--    pColOutlineBuff->SetLevelRange( nColFirst, nColLast, nLevel, bCollapsed, bHidden );
-+    pColOutlineBuff->SetLevelRange( nColFirst, nColLast, nLevel, bCollapsed );
- 
-     if( bHidden )
-         pColRowBuff->HideColRange( nColFirst, nColLast );
-@@ -943,9 +941,7 @@ void ImportExcel::Row34( void )
-         aIn >> nGrbit >> nXF;
- 
-         sal_uInt8 nLevel = ::extract_value< sal_uInt8 >( nGrbit, 0, 3 );
--        pRowOutlineBuff->SetLevel( nScRow, nLevel,
--            ::get_flag( nGrbit, EXC_ROW_COLLAPSED ), ::get_flag( nGrbit, EXC_ROW_HIDDEN ) );
--
-+        pRowOutlineBuff->SetLevel( nScRow, nLevel, ::get_flag( nGrbit, EXC_ROW_COLLAPSED ) );
-         pColRowBuff->SetRowSettings( nScRow, nRowHeight, nGrbit );
- 
-         if( nGrbit & EXC_ROW_USEDEFXF )
-diff --git sc/source/filter/inc/colrowst.hxx sc/source/filter/inc/colrowst.hxx
-index 768622c..8c664ad 100644
---- sc/source/filter/inc/colrowst.hxx
-+++ sc/source/filter/inc/colrowst.hxx
-@@ -29,6 +29,10 @@
- #define SC_COLROWST_HXX
- 
- #include "xiroot.hxx"
-+#include <mdds/flat_segment_tree.hpp>
-+
-+#define XLS_USE_NEW_ROW_CONT 1
-+
- 
- class XclImpStream;
- 
-@@ -59,8 +63,13 @@ public:
- private:
-     ScfUInt16Vec        maWidths;           /// Column widths in twips.
-     ScfUInt8Vec         maColFlags;         /// Flags for all columns.
--    ScfUInt16Vec        maHeights;          /// Row heights in twips.
--    ScfUInt8Vec         maRowFlags;         /// Flags for all rows.
-+                                            ///
-+    typedef ::mdds::flat_segment_tree<SCROW, sal_uInt16> RowHeightsType;
-+    typedef ::mdds::flat_segment_tree<SCROW, sal_uInt8>  RowFlagsType;
-+    typedef ::mdds::flat_segment_tree<SCROW, bool>       RowHiddenType;
-+    RowHeightsType      maRowHeights;
-+    RowFlagsType        maRowFlags;
-+    RowHiddenType       maHiddenRows;
- 
-     SCROW               mnLastScRow;
- 
-diff --git sc/source/filter/inc/otlnbuff.hxx sc/source/filter/inc/otlnbuff.hxx
-index 036a55f..5d509b9 100644
---- sc/source/filter/inc/otlnbuff.hxx
-+++ sc/source/filter/inc/otlnbuff.hxx
-@@ -29,50 +29,31 @@
- #define SC_OTLNBUFF_HXX
- 
- #include <tools/solar.h>
-+#include <mdds/flat_segment_tree.hpp>
-+#include <set>
- 
- class ScOutlineArray;
- 
- class XclImpOutlineBuffer
- {
--    // -> exctools.cxx
--    private:
--        BYTE*			pLevel;
--        BOOL*			pOuted;
--        BOOL*			pHidden;
--        SCSIZE			nSize;
--        SCSIZE			nLast;
--        BYTE			nMaxLevel;
--        ScOutlineArray*	pOutlineArray;
--        BOOL			bButtonNormal;	// TRUE -> right / under
--    public:
--                        XclImpOutlineBuffer( SCSIZE nNewSize );
--                        ~XclImpOutlineBuffer();
--        void			SetLevel( SCSIZE nIndex, BYTE nVal, BOOL bOuted, BOOL bHidden );
--        void			SetOutlineArray( ScOutlineArray* pOArray );
--        void			Reset( void );
--        void			MakeScOutline( void );
--        void			SetLevelRange( SCSIZE nF, SCSIZE nL, BYTE nVal,
--                            BOOL bOuted, BOOL bHidden );
--
--        inline BOOL		HasOutline( void ) const;
--
--        inline void		SetButtonMode( const BOOL bRightOrUnder );
-+public:
-+    XclImpOutlineBuffer( SCSIZE nNewSize );
-+    ~XclImpOutlineBuffer();
-+
-+    void SetLevel( SCSIZE nIndex, sal_uInt8 nVal, bool bCollapsed );
-+    void SetOutlineArray( ScOutlineArray* pOArray );
-+    void MakeScOutline();
-+    void SetLevelRange( SCSIZE nF, SCSIZE nL, sal_uInt8 nVal, bool bCollapsed );
-+    void SetButtonMode( bool bRightOrUnder );
-+
-+private:
-+    typedef ::mdds::flat_segment_tree<SCSIZE, sal_uInt8> OutlineLevels;
-+    OutlineLevels       maLevels;
-+    ::std::set<SCSIZE>  maCollapsedPosSet;
-+    ScOutlineArray*     mpOutlineArray;
-+    sal_uInt8           mnMaxLevel;
-+    bool                mbButtonAfter:1;
- };
- 
--
--
--
--inline BOOL XclImpOutlineBuffer::HasOutline( void ) const
--{
--    return nMaxLevel > 0;
--}
--
--
--inline void XclImpOutlineBuffer::SetButtonMode( const BOOL b )
--{
--    bButtonNormal = b;
--}
--
--
- #endif
- 


More information about the ooo-build-commit mailing list