[Libreoffice-commits] .: 2 commits - sc/inc sc/source
Markus Mohrhard
mmohrhard at kemper.freedesktop.org
Mon Jul 4 18:02:37 PDT 2011
sc/inc/markdata.hxx | 8
sc/source/core/data/markdata.cxx | 21 +
sc/source/ui/view/pfuncache.cxx | 43 +-
sc/source/ui/view/spelldialog.cxx | 10
sc/source/ui/view/tabvwshf.cxx | 106 +++---
sc/source/ui/view/viewdata.cxx | 23 -
sc/source/ui/view/viewfun2.cxx | 187 +++++-------
sc/source/ui/view/viewfun3.cxx | 31 --
sc/source/ui/view/viewfun4.cxx | 79 ++---
sc/source/ui/view/viewfunc.cxx | 577 ++++++++++++++++++--------------------
sc/source/ui/view/viewutil.cxx | 28 -
11 files changed, 553 insertions(+), 560 deletions(-)
New commits:
commit 34dfde2d3f12627ceb50a7106cb3a5cbf3cbf7a9
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Tue Jul 5 00:41:08 2011 +0200
change from manual loop to ScMarkData::iterator
in most situations it's much faster to use the iterator instead of the
manual loop + ScMarkData::GetTableSelect
diff --git a/sc/source/ui/view/pfuncache.cxx b/sc/source/ui/view/pfuncache.cxx
index 3653bb4..3ae227a 100644
--- a/sc/source/ui/view/pfuncache.cxx
+++ b/sc/source/ui/view/pfuncache.cxx
@@ -111,35 +111,34 @@ void ScPrintFuncCache::InitLocations( const ScMarkData& rMark, OutputDevice* pDe
ScDocument* pDoc = pDocSh->GetDocument();
SCTAB nTabCount = pDoc->GetTableCount();
- for ( SCTAB nTab=0; nTab<nTabCount; nTab++ )
+ ScMarkData::iterator itr = rMark.begin(), itrEnd = rMark.end();
+ for (; itr != itrEnd && (*itr) < nTabCount; ++itr)
{
- if ( rMark.GetTableSelect( nTab ) )
- {
- ScPrintFunc aFunc( pDev, pDocSh, nTab, nFirstAttr[nTab], nTotalPages, pSelRange, &aSelection.GetOptions() );
- aFunc.SetRenderFlag( sal_True );
-
- long nDisplayStart = GetDisplayStart( nTab );
+ SCTAB nTab = *itr;
+ ScPrintFunc aFunc( pDev, pDocSh, nTab, nFirstAttr[nTab], nTotalPages, pSelRange, &aSelection.GetOptions() );
+ aFunc.SetRenderFlag( sal_True );
- for ( long nPage=0; nPage<nPages[nTab]; nPage++ )
- {
- Range aPageRange( nRenderer+1, nRenderer+1 );
- MultiSelection aPage( aPageRange );
- aPage.SetTotalRange( Range(0,RANGE_MAX) );
- aPage.Select( aPageRange );
+ long nDisplayStart = GetDisplayStart( nTab );
- ScPreviewLocationData aLocData( pDoc, pDev );
- aFunc.DoPrint( aPage, nTabStart, nDisplayStart, false, NULL, &aLocData );
+ for ( long nPage=0; nPage<nPages[nTab]; nPage++ )
+ {
+ Range aPageRange( nRenderer+1, nRenderer+1 );
+ MultiSelection aPage( aPageRange );
+ aPage.SetTotalRange( Range(0,RANGE_MAX) );
+ aPage.Select( aPageRange );
- ScRange aCellRange;
- Rectangle aPixRect;
- if ( aLocData.GetMainCellRange( aCellRange, aPixRect ) )
- aLocations.push_back( ScPrintPageLocation( nRenderer, aCellRange, aPixRect ) );
+ ScPreviewLocationData aLocData( pDoc, pDev );
+ aFunc.DoPrint( aPage, nTabStart, nDisplayStart, false, NULL, &aLocData );
- ++nRenderer;
- }
+ ScRange aCellRange;
+ Rectangle aPixRect;
+ if ( aLocData.GetMainCellRange( aCellRange, aPixRect ) )
+ aLocations.push_back( ScPrintPageLocation( nRenderer, aCellRange, aPixRect ) );
- nTabStart += nPages[nTab];
+ ++nRenderer;
}
+
+ nTabStart += nPages[nTab];
}
bLocInitialized = true;
diff --git a/sc/source/ui/view/spelldialog.cxx b/sc/source/ui/view/spelldialog.cxx
index 04073c7..1015771 100644
--- a/sc/source/ui/view/spelldialog.cxx
+++ b/sc/source/ui/view/spelldialog.cxx
@@ -237,13 +237,13 @@ void ScSpellDialogChildWindow::Init()
if ( rMarkData.GetSelectCount() > 1 )
{
- SCTAB nTabCount = mpDoc->GetTableCount();
- for( SCTAB nOtherTab = 0; nOtherTab < nTabCount; ++nOtherTab )
+ ScMarkData::iterator itr = rMarkData.begin(), itrEnd = rMarkData.end();
+ for (; itr != itrEnd; ++itr)
{
- if( rMarkData.GetTableSelect( nOtherTab ) && (nOtherTab != nTab) )
+ if( *itr != nTab )
{
- mxUndoDoc->AddUndoTab( nOtherTab, nOtherTab );
- mxRedoDoc->AddUndoTab( nOtherTab, nOtherTab );
+ mxUndoDoc->AddUndoTab( *itr, *itr );
+ mxRedoDoc->AddUndoTab( *itr, *itr );
}
}
}
diff --git a/sc/source/ui/view/tabvwshf.cxx b/sc/source/ui/view/tabvwshf.cxx
index ebf67a8..b5ccdf0 100644
--- a/sc/source/ui/view/tabvwshf.cxx
+++ b/sc/source/ui/view/tabvwshf.cxx
@@ -634,7 +634,7 @@ void ScTabViewShell::ExecuteTable( SfxRequest& rReq )
{
SCTAB nNewTab = nCurrentTab;
SCTAB nFirstTab=0;
- sal_Bool bTabFlag=false;
+ bool bTabFlag=false;
ScMarkData& rMark = pViewData->GetMarkData();
std::vector<SCTAB> TheTabs;
for(SCTAB i=0;i<nTabCount;i++)
@@ -672,9 +672,9 @@ void ScTabViewShell::ExecuteTable( SfxRequest& rReq )
String aUndo = ScGlobal::GetRscString( STR_UNDO_TAB_RTL );
pUndoManager->EnterListAction( aUndo, aUndo );
- for (SCTAB nTab=0; nTab<nTabCount; nTab++)
- if ( rMark.GetTableSelect(nTab) )
- aFunc.SetLayoutRTL( nTab, bSet, false );
+ ScMarkData::iterator itr = rMark.begin(), itrEnd = rMark.end();
+ for (; itr != itrEnd; ++itr)
+ aFunc.SetLayoutRTL( *itr, bSet, false );
pUndoManager->LeaveListAction();
}
@@ -723,11 +723,12 @@ void ScTabViewShell::ExecuteTable( SfxRequest& rReq )
{
scoped_ptr<ScUndoTabColorInfo::List>
pTabColorList(new ScUndoTabColorInfo::List);
- for (SCTAB nTab=0; nTab<nTabCount; nTab++)
+ ScMarkData::iterator itr = rMark.begin(), itrEnd = rMark.end();
+ for (; itr != itrEnd; ++itr)
{
- if ( rMark.GetTableSelect(nTab) && !pDoc->IsTabProtected(nTab) )
+ if ( !pDoc->IsTabProtected(*itr) )
{
- ScUndoTabColorInfo aTabColorInfo(nTab);
+ ScUndoTabColorInfo aTabColorInfo(*itr);
aTabColorInfo.maNewTabBgColor = aColor;
pTabColorList->push_back(aTabColorInfo);
}
@@ -771,69 +772,70 @@ void ScTabViewShell::ExecuteTable( SfxRequest& rReq )
pTabColorList(new ScUndoTabColorInfo::List);
if ( nTabSelCount > 1 )
{
- for (SCTAB nTab=0; nTab<nTabCount; nTab++)
- {
- if ( rMark.GetTableSelect(nTab) && !pDoc->IsTabProtected(nTab) )
+ ScMarkData::iterator itr = rMark.begin(), itrEnd = rMark.end();
+ for (; itr != itrEnd; ++itr)
{
- ScUndoTabColorInfo aTabColorInfo(nTab);
- aTabColorInfo.maNewTabBgColor = aSelectedColor;
- pTabColorList->push_back(aTabColorInfo);
+ if ( !pDoc->IsTabProtected(*itr) )
+ {
+ ScUndoTabColorInfo aTabColorInfo(*itr);
+ aTabColorInfo.maNewTabBgColor = aSelectedColor;
+ pTabColorList->push_back(aTabColorInfo);
+ }
}
+ bDone = SetTabBgColor( *pTabColorList );
}
- bDone = SetTabBgColor( *pTabColorList );
- }
- else
- {
- bDone = SetTabBgColor( aSelectedColor, nCurrentTab ); //ScViewFunc.SetTabBgColor
- }
- if ( bDone )
- {
- rReq.AppendItem( SvxColorItem( aTabBgColor, nSlot ) );
- rReq.Done();
- }
- else
- {
- if( rReq.IsAPI() )
+ else
+ {
+ bDone = SetTabBgColor( aSelectedColor, nCurrentTab ); //ScViewFunc.SetTabBgColor
+ }
+ if ( bDone )
+ {
+ rReq.AppendItem( SvxColorItem( aTabBgColor, nSlot ) );
+ rReq.Done();
+ }
+ else
{
- StarBASIC::Error( SbERR_SETPROP_FAILED );
+ if( rReq.IsAPI() )
+ {
+ StarBASIC::Error( SbERR_SETPROP_FAILED );
+ }
}
}
}
+ delete( pDlg );
}
- delete( pDlg );
}
- }
- break;
+ break;
- case FID_TAB_EVENTS:
- {
- ScDocShell* pDocSh = pViewData->GetDocShell();
- uno::Reference<container::XNameReplace> xEvents( new ScSheetEventsObj( pDocSh, nCurrentTab ) );
- uno::Reference<frame::XFrame> xFrame = GetViewFrame()->GetFrame().GetFrameInterface();
- SvxAbstractDialogFactory* pDlgFactory = SvxAbstractDialogFactory::Create();
- if (pDlgFactory)
+ case FID_TAB_EVENTS:
{
- std::auto_ptr<VclAbstractDialog> pDialog( pDlgFactory->CreateSvxMacroAssignDlg(
- GetDialogParent(), xFrame, false, xEvents, 0 ) );
- if ( pDialog.get() && pDialog->Execute() == RET_OK )
+ ScDocShell* pDocSh = pViewData->GetDocShell();
+ uno::Reference<container::XNameReplace> xEvents( new ScSheetEventsObj( pDocSh, nCurrentTab ) );
+ uno::Reference<frame::XFrame> xFrame = GetViewFrame()->GetFrame().GetFrameInterface();
+ SvxAbstractDialogFactory* pDlgFactory = SvxAbstractDialogFactory::Create();
+ if (pDlgFactory)
{
- // the dialog modifies the settings directly
+ std::auto_ptr<VclAbstractDialog> pDialog( pDlgFactory->CreateSvxMacroAssignDlg(
+ GetDialogParent(), xFrame, false, xEvents, 0 ) );
+ if ( pDialog.get() && pDialog->Execute() == RET_OK )
+ {
+ // the dialog modifies the settings directly
+ }
}
}
- }
- break;
+ break;
- default:
- OSL_FAIL("Unbekannte Message bei ViewShell");
- break;
+ default:
+ OSL_FAIL("Unbekannte Message bei ViewShell");
+ break;
+ }
}
-}
-//------------------------------------------------------------------
+ //------------------------------------------------------------------
-void ScTabViewShell::GetStateTable( SfxItemSet& rSet )
-{
- ScViewData* pViewData = GetViewData();
+ void ScTabViewShell::GetStateTable( SfxItemSet& rSet )
+ {
+ ScViewData* pViewData = GetViewData();
ScDocument* pDoc = pViewData->GetDocument();
ScDocShell* pDocShell = pViewData->GetDocShell();
ScMarkData& rMark = GetViewData()->GetMarkData();
diff --git a/sc/source/ui/view/viewdata.cxx b/sc/source/ui/view/viewdata.cxx
index 9b1a5be..e5f7820 100644
--- a/sc/source/ui/view/viewdata.cxx
+++ b/sc/source/ui/view/viewdata.cxx
@@ -591,12 +591,8 @@ void ScViewData::SetZoomType( SvxZoomType eNew, sal_Bool bAll )
std::vector< SCTAB > vTabs; // Empty for all tabs
if ( !bAll ) // get selected tabs
{
- SCTAB nTabCount = pDoc->GetTableCount();
- for (SCTAB i=0; i<nTabCount; i++)
- {
- if ( aMarkData.GetTableSelect(i) )
- vTabs.push_back( i );
- }
+ ScMarkData::iterator itr = aMarkData.begin(), itrEnd = aMarkData.end();
+ vTabs.insert(vTabs.begin(), itr, itrEnd);
}
SetZoomType( eNew, vTabs );
}
@@ -680,12 +676,8 @@ void ScViewData::SetZoom( const Fraction& rNewX, const Fraction& rNewY, sal_Bool
std::vector< SCTAB > vTabs;
if ( !bAll ) // get selected tabs
{
- SCTAB nTabCount = pDoc->GetTableCount();
- for (SCTAB i=0; i<nTabCount; i++)
- {
- if ( aMarkData.GetTableSelect(i) )
- vTabs.push_back( i );
- }
+ ScMarkData::iterator itr = aMarkData.begin(), itrEnd = aMarkData.end();
+ vTabs.insert(vTabs.begin(), itr, itrEnd);
}
SetZoom( rNewX, rNewY, vTabs );
}
@@ -1434,10 +1426,9 @@ void ScViewData::CreateTabData( SCTAB nNewTab )
void ScViewData::CreateSelectedTabData()
{
- SCTAB nTabCount = aMarkData.GetLastSelected();
- for (SCTAB i=0; i<nTabCount; i++)
- if ( aMarkData.GetTableSelect(i))
- CreateTabData(i);
+ ScMarkData::iterator itr = aMarkData.begin(), itrEnd = aMarkData.end();
+ for (; itr != itrEnd; ++itr)
+ CreateTabData(*itr);
}
void ScViewData::EnsureTabDataSize(size_t nSize)
diff --git a/sc/source/ui/view/viewfun2.cxx b/sc/source/ui/view/viewfun2.cxx
index 0057be7..7fce7b5 100644
--- a/sc/source/ui/view/viewfun2.cxx
+++ b/sc/source/ui/view/viewfun2.cxx
@@ -145,30 +145,28 @@ sal_Bool ScViewFunc::AdjustBlockHeight( sal_Bool bPaint, ScMarkData* pMarkData )
}
sal_Bool bAnyChanged = false;
- SCTAB nTabCount = pDoc->GetTableCount();
- for (SCTAB nTab=0; nTab<nTabCount; nTab++)
- {
- if (pMarkData->GetTableSelect(nTab))
- {
- SCCOLROW* pOneRange = pRanges;
- sal_Bool bChanged = false;
- SCROW nPaintY = 0;
- for (SCROW nRangeNo=0; nRangeNo<nRangeCnt; nRangeNo++)
+ ScMarkData::iterator itr = pMarkData->begin(), itrEnd = pMarkData->end();
+ for (; itr != itrEnd; ++itr)
+ {
+ SCTAB nTab = *itr;
+ SCCOLROW* pOneRange = pRanges;
+ sal_Bool bChanged = false;
+ SCROW nPaintY = 0;
+ for (SCROW nRangeNo=0; nRangeNo<nRangeCnt; nRangeNo++)
+ {
+ SCROW nStartNo = *(pOneRange++);
+ SCROW nEndNo = *(pOneRange++);
+ if (pDoc->SetOptimalHeight( nStartNo, nEndNo, nTab, 0, aProv.GetDevice(),
+ nPPTX, nPPTY, aZoomX, aZoomY, false ))
{
- SCROW nStartNo = *(pOneRange++);
- SCROW nEndNo = *(pOneRange++);
- if (pDoc->SetOptimalHeight( nStartNo, nEndNo, nTab, 0, aProv.GetDevice(),
- nPPTX, nPPTY, aZoomX, aZoomY, false ))
- {
- if (!bChanged)
- nPaintY = nStartNo;
- bAnyChanged = bChanged = sal_True;
- }
+ if (!bChanged)
+ nPaintY = nStartNo;
+ bAnyChanged = bChanged = sal_True;
}
- if ( bPaint && bChanged )
- pDocSh->PostPaint( 0, nPaintY, nTab, MAXCOL, MAXROW, nTab,
- PAINT_GRID | PAINT_LEFT );
}
+ if ( bPaint && bChanged )
+ pDocSh->PostPaint( 0, nPaintY, nTab, MAXCOL, MAXROW, nTab,
+ PAINT_GRID | PAINT_LEFT );
}
delete[] pRanges;
@@ -953,7 +951,6 @@ void ScViewFunc::SetPrintRanges( sal_Bool bEntireSheet, const String* pPrint,
ScDocShell* pDocSh = GetViewData()->GetDocShell();
ScDocument* pDoc = pDocSh->GetDocument();
- SCTAB nTabCount = pDoc->GetTableCount();
ScMarkData& rMark = GetViewData()->GetMarkData();
SCTAB nTab;
sal_Bool bUndo (pDoc->IsUndoEnabled());
@@ -962,75 +959,76 @@ void ScViewFunc::SetPrintRanges( sal_Bool bEntireSheet, const String* pPrint,
ScAddress::Details aDetails(pDoc->GetAddressConvention(), 0, 0);
- for (nTab=0; nTab<nTabCount; nTab++)
- if (rMark.GetTableSelect(nTab))
- {
- ScRange aRange( 0,0,nTab );
+ ScMarkData::iterator itr = rMark.begin(), itrEnd = rMark.end();
+ for (; itr != itrEnd; ++itr)
+ {
+ nTab = *itr;
+ ScRange aRange( 0,0,nTab );
- // print ranges
+ // print ranges
- if( !bAddPrint )
- pDoc->ClearPrintRanges( nTab );
+ if( !bAddPrint )
+ pDoc->ClearPrintRanges( nTab );
- if( bEntireSheet )
- {
- pDoc->SetPrintEntireSheet( nTab );
- }
- else if ( pPrint )
+ if( bEntireSheet )
+ {
+ pDoc->SetPrintEntireSheet( nTab );
+ }
+ else if ( pPrint )
+ {
+ if ( pPrint->Len() )
{
- if ( pPrint->Len() )
+ const sal_Unicode sep = ScCompiler::GetNativeSymbol(ocSep).GetChar(0);
+ sal_uInt16 nTCount = pPrint->GetTokenCount(sep);
+ for (sal_uInt16 i=0; i<nTCount; i++)
{
- const sal_Unicode sep = ScCompiler::GetNativeSymbol(ocSep).GetChar(0);
- sal_uInt16 nTCount = pPrint->GetTokenCount(sep);
- for (sal_uInt16 i=0; i<nTCount; i++)
- {
- String aToken = pPrint->GetToken(i, sep);
- if ( aRange.ParseAny( aToken, pDoc, aDetails ) & SCA_VALID )
- pDoc->AddPrintRange( nTab, aRange );
- }
+ String aToken = pPrint->GetToken(i, sep);
+ if ( aRange.ParseAny( aToken, pDoc, aDetails ) & SCA_VALID )
+ pDoc->AddPrintRange( nTab, aRange );
}
}
- else // NULL = use selection (print range is always set), use empty string to delete all ranges
+ }
+ else // NULL = use selection (print range is always set), use empty string to delete all ranges
+ {
+ if ( GetViewData()->GetSimpleArea( aRange ) == SC_MARK_SIMPLE )
{
- if ( GetViewData()->GetSimpleArea( aRange ) == SC_MARK_SIMPLE )
- {
- pDoc->AddPrintRange( nTab, aRange );
- }
- else if ( rMark.IsMultiMarked() )
+ pDoc->AddPrintRange( nTab, aRange );
+ }
+ else if ( rMark.IsMultiMarked() )
+ {
+ rMark.MarkToMulti();
+ ScRangeListRef pList( new ScRangeList );
+ rMark.FillRangeListWithMarks( pList, false );
+ for (size_t i = 0, n = pList->size(); i < n; ++i)
{
- rMark.MarkToMulti();
- ScRangeListRef pList( new ScRangeList );
- rMark.FillRangeListWithMarks( pList, false );
- for (size_t i = 0, n = pList->size(); i < n; ++i)
- {
- ScRange* pR = (*pList)[i];
- pDoc->AddPrintRange(nTab, *pR);
- }
+ ScRange* pR = (*pList)[i];
+ pDoc->AddPrintRange(nTab, *pR);
}
}
+ }
- // repeat columns
+ // repeat columns
- if ( pRepCol )
- {
- if ( !pRepCol->Len() )
- pDoc->SetRepeatColRange( nTab, NULL );
- else
- if ( aRange.ParseAny( *pRepCol, pDoc, aDetails ) & SCA_VALID )
- pDoc->SetRepeatColRange( nTab, &aRange );
- }
+ if ( pRepCol )
+ {
+ if ( !pRepCol->Len() )
+ pDoc->SetRepeatColRange( nTab, NULL );
+ else
+ if ( aRange.ParseAny( *pRepCol, pDoc, aDetails ) & SCA_VALID )
+ pDoc->SetRepeatColRange( nTab, &aRange );
+ }
- // repeat rows
+ // repeat rows
- if ( pRepRow )
- {
- if ( !pRepRow->Len() )
- pDoc->SetRepeatRowRange( nTab, NULL );
- else
- if ( aRange.ParseAny( *pRepRow, pDoc, aDetails ) & SCA_VALID )
- pDoc->SetRepeatRowRange( nTab, &aRange );
- }
+ if ( pRepRow )
+ {
+ if ( !pRepRow->Len() )
+ pDoc->SetRepeatRowRange( nTab, NULL );
+ else
+ if ( aRange.ParseAny( *pRepRow, pDoc, aDetails ) & SCA_VALID )
+ pDoc->SetRepeatRowRange( nTab, &aRange );
}
+ }
// undo (for all tables)
if (bUndo)
@@ -1043,9 +1041,9 @@ void ScViewFunc::SetPrintRanges( sal_Bool bEntireSheet, const String* pPrint,
// update page breaks
- for (nTab=0; nTab<nTabCount; nTab++)
- if (rMark.GetTableSelect(nTab))
- ScPrintFunc( pDocSh, pDocSh->GetPrinter(), nTab ).UpdatePages();
+ itr = rMark.begin();
+ for (; itr != itrEnd; ++itr)
+ ScPrintFunc( pDocSh, pDocSh->GetPrinter(), *itr ).UpdatePages();
SfxBindings& rBindings = GetViewData()->GetBindings();
rBindings.Invalidate( SID_DELETE_PRINTAREA );
@@ -1118,14 +1116,11 @@ sal_Bool ScViewFunc::MergeCells( sal_Bool bApi, sal_Bool& rDoContents, sal_Bool
// Check for the contents of all selected tables.
bool bAskDialog = false;
- SCTAB nTabCount = pDoc->GetTableCount();
ScCellMergeOption aMergeOption(nStartCol, nStartRow, nEndCol, nEndRow, bCenter);
- for (SCTAB i = 0; i < nTabCount; ++i)
+ ScMarkData::iterator itr = rMark.begin(), itrEnd = rMark.end();
+ for (; itr != itrEnd; ++itr)
{
- if (!rMark.GetTableSelect(i))
- // this table is not selected.
- continue;
-
+ SCTAB i = *itr;
aMergeOption.maTabs.insert(i);
if (!pDoc->IsBlockEmpty(i, nStartCol, nStartRow+1, nStartCol, nEndRow) ||
@@ -1233,18 +1228,15 @@ sal_Bool ScViewFunc::RemoveMerge( sal_Bool bRecord )
pDoc->ExtendMerge( aExtended );
ScDocShell* pDocSh = GetViewData()->GetDocShell();
const ScMarkData& rMark = GetViewData()->GetMarkData();
- SCTAB nTabCount = pDoc->GetTableCount();
ScCellMergeOption aOption(aRange.aStart.Col(), aRange.aStart.Row(), aRange.aEnd.Col(), aRange.aEnd.Row());
bool bExtended = false;
do
{
bExtended = false;
- for (SCTAB i = 0; i < nTabCount; ++i)
+ ScMarkData::iterator itr = rMark.begin(), itrEnd = rMark.end();
+ for (; itr != itrEnd; ++itr)
{
- if (!rMark.GetTableSelect(i))
- // This table is not selected.
- continue;
-
+ SCTAB i = *itr;
aOption.maTabs.insert(i);
aExtended.aStart.SetTab(i);
aExtended.aEnd.SetTab(i);
@@ -1415,10 +1407,11 @@ void ScViewFunc::FillTab( sal_uInt16 nFlags, sal_uInt16 nFunction, sal_Bool bSki
pUndoDoc = new ScDocument( SCDOCMODE_UNDO );
pUndoDoc->InitUndo( pDoc, nTab, nTab );
- SCTAB nTabCount = pDoc->GetTableCount();
- for (SCTAB i=0; i<nTabCount; i++)
- if (i != nTab && rMark.GetTableSelect(i))
+ ScMarkData::iterator itr = rMark.begin(), itrEnd = rMark.end();
+ for (; itr != itrEnd; ++itr)
+ if (*itr != nTab )
{
+ SCTAB i = *itr;
pUndoDoc->AddUndoTab( i, i );
aMarkRange.aStart.SetTab( i );
aMarkRange.aEnd.SetTab( i );
@@ -1624,12 +1617,8 @@ void ScViewFunc::SearchAndReplace( const SvxSearchItem* pSearchItem,
}
else
{ //! at least one is always selected
- nStartTab = nEndTab = rMark.GetFirstSelected();
- for ( SCTAB j = nStartTab + 1; j <= nLastTab; j++ )
- {
- if ( rMark.GetTableSelect( j ) )
- nEndTab = j;
- }
+ nStartTab = rMark.GetFirstSelected();
+ nEndTab = rMark.GetLastSelected();
}
if ( nCommand == SVX_SEARCHCMD_FIND
diff --git a/sc/source/ui/view/viewfun3.cxx b/sc/source/ui/view/viewfun3.cxx
index a4383c7..9b5a351 100644
--- a/sc/source/ui/view/viewfun3.cxx
+++ b/sc/source/ui/view/viewfun3.cxx
@@ -924,9 +924,9 @@ sal_Bool ScViewFunc::PasteOnDrawObject( const uno::Reference<datatransfer::XTran
sal_Bool lcl_SelHasAttrib( ScDocument* pDoc, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
const ScMarkData& rTabSelection, sal_uInt16 nMask )
{
- SCTAB nTabCount = pDoc->GetTableCount();
- for (SCTAB nTab=0; nTab<nTabCount; nTab++)
- if ( rTabSelection.GetTableSelect(nTab) && pDoc->HasAttrib( nCol1, nRow1, nTab, nCol2, nRow2, nTab, nMask ) )
+ ScMarkData::iterator itr = rTabSelection.begin(), itrEnd = rTabSelection.end();
+ for (; itr != itrEnd; ++itr)
+ if ( pDoc->HasAttrib( nCol1, nRow1, *itr, nCol2, nRow2, *itr, nMask ) )
return sal_True;
return false;
}
@@ -959,13 +959,10 @@ private:
bool lcl_checkDestRangeForOverwrite(const ScRange& rDestRange, const ScDocument* pDoc, const ScMarkData& rMark, Window* pParentWnd)
{
bool bIsEmpty = true;
- SCTAB nTabCount = pDoc->GetTableCount();
- for (SCTAB nTab=0; nTab < nTabCount && bIsEmpty; ++nTab)
+ ScMarkData::iterator itr = rMark.begin(), itrEnd = rMark.end();
+ for (; itr != itrEnd && bIsEmpty; ++itr)
{
- if (!rMark.GetTableSelect(nTab))
- continue;
-
- bIsEmpty = pDoc->IsBlockEmpty(nTab, rDestRange.aStart.Col(), rDestRange.aStart.Row(),
+ bIsEmpty = pDoc->IsBlockEmpty(*itr, rDestRange.aStart.Col(), rDestRange.aStart.Row(),
rDestRange.aEnd.Col(), rDestRange.aEnd.Row());
}
@@ -1732,7 +1729,6 @@ void ScViewFunc::PostPasteFromClip(const ScRange& rPasteRange, const ScMarkData&
{
ScViewData* pViewData = GetViewData();
ScDocShell* pDocSh = pViewData->GetDocShell();
- ScDocument* pDoc = pViewData->GetDocument();
pDocSh->UpdateOle(pViewData);
SelectionChanged();
@@ -1742,16 +1738,13 @@ void ScViewFunc::PostPasteFromClip(const ScRange& rPasteRange, const ScMarkData&
if ( pModelObj && pModelObj->HasChangesListeners() )
{
ScRangeList aChangeRanges;
- SCTAB nTabCount = pDoc->GetTableCount();
- for ( SCTAB i = 0; i < nTabCount; ++i )
+ ScMarkData::iterator itr = rMark.begin(), itrEnd = rMark.end();
+ for (; itr != itrEnd; ++itr)
{
- if ( rMark.GetTableSelect( i ) )
- {
- ScRange aChangeRange(rPasteRange);
- aChangeRange.aStart.SetTab( i );
- aChangeRange.aEnd.SetTab( i );
- aChangeRanges.Append( aChangeRange );
- }
+ ScRange aChangeRange(rPasteRange);
+ aChangeRange.aStart.SetTab( *itr );
+ aChangeRange.aEnd.SetTab( *itr );
+ aChangeRanges.Append( aChangeRange );
}
pModelObj->NotifyChanges( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "cell-change" ) ), aChangeRanges );
}
diff --git a/sc/source/ui/view/viewfun4.cxx b/sc/source/ui/view/viewfun4.cxx
index 87f07e7..688dbc7 100644
--- a/sc/source/ui/view/viewfun4.cxx
+++ b/sc/source/ui/view/viewfun4.cxx
@@ -227,9 +227,10 @@ void ScViewFunc::DoRefConversion( sal_Bool bRecord )
if ( rMark.GetSelectCount() > 1 )
{
- for (SCTAB i=0; i<nTabCount; i++)
- if ( rMark.GetTableSelect(i) && i != nTab )
- pUndoDoc->AddUndoTab( i, i );
+ ScMarkData::iterator itr = rMark.begin(), itrEnd = rMark.end();
+ for (; itr != itrEnd; ++itr)
+ if ( *itr != nTab )
+ pUndoDoc->AddUndoTab( *itr, *itr );
}
ScRange aCopyRange = aMarkRange;
aCopyRange.aStart.SetTab(0);
@@ -241,41 +242,40 @@ void ScViewFunc::DoRefConversion( sal_Bool bRecord )
GetViewData()->GetMultiArea( xRanges );
size_t nCount = xRanges->size();
- for (SCTAB i=0; i<nTabCount; i++)
+ ScMarkData::iterator itr = rMark.begin(), itrEnd = rMark.end();
+ for (; itr != itrEnd; ++itr)
{
- if (rMark.GetTableSelect(i))
+ SCTAB i = *itr;
+ for (size_t j = 0; j < nCount; ++j)
{
- for (size_t j = 0; j < nCount; ++j)
+ ScRange aRange = *(*xRanges)[j];
+ aRange.aStart.SetTab(i);
+ aRange.aEnd.SetTab(i);
+ ScCellIterator aIter( pDoc, aRange );
+ ScBaseCell* pCell = aIter.GetFirst();
+ while ( pCell )
{
- ScRange aRange = *(*xRanges)[j];
- aRange.aStart.SetTab(i);
- aRange.aEnd.SetTab(i);
- ScCellIterator aIter( pDoc, aRange );
- ScBaseCell* pCell = aIter.GetFirst();
- while ( pCell )
+ if (pCell->GetCellType() == CELLTYPE_FORMULA)
{
- if (pCell->GetCellType() == CELLTYPE_FORMULA)
+ String aOld;
+ ((ScFormulaCell*)pCell)->GetFormula(aOld);
+ xub_StrLen nLen = aOld.Len();
+ ScRefFinder aFinder( aOld, aIter.GetPos(), pDoc, pDoc->GetAddressConvention() );
+ aFinder.ToggleRel( 0, nLen );
+ if (aFinder.GetFound())
{
- String aOld;
- ((ScFormulaCell*)pCell)->GetFormula(aOld);
- xub_StrLen nLen = aOld.Len();
- ScRefFinder aFinder( aOld, aIter.GetPos(), pDoc, pDoc->GetAddressConvention() );
- aFinder.ToggleRel( 0, nLen );
- if (aFinder.GetFound())
- {
- ScAddress aPos = ((ScFormulaCell*)pCell)->aPos;
- String aNew = aFinder.GetText();
- ScCompiler aComp( pDoc, aPos);
- aComp.SetGrammar(pDoc->GetGrammar());
- ScTokenArray* pArr = aComp.CompileString( aNew );
- ScFormulaCell* pNewCell = new ScFormulaCell( pDoc, aPos,
- pArr,formula::FormulaGrammar::GRAM_DEFAULT, MM_NONE );
- pDoc->PutCell( aPos, pNewCell );
- bOk = sal_True;
- }
+ ScAddress aPos = ((ScFormulaCell*)pCell)->aPos;
+ String aNew = aFinder.GetText();
+ ScCompiler aComp( pDoc, aPos);
+ aComp.SetGrammar(pDoc->GetGrammar());
+ ScTokenArray* pArr = aComp.CompileString( aNew );
+ ScFormulaCell* pNewCell = new ScFormulaCell( pDoc, aPos,
+ pArr,formula::FormulaGrammar::GRAM_DEFAULT, MM_NONE );
+ pDoc->PutCell( aPos, pNewCell );
+ bOk = sal_True;
}
- pCell = aIter.GetNext();
}
+ pCell = aIter.GetNext();
}
}
}
@@ -287,9 +287,10 @@ void ScViewFunc::DoRefConversion( sal_Bool bRecord )
if ( rMark.GetSelectCount() > 1 )
{
- for (SCTAB i=0; i<nTabCount; i++)
- if ( rMark.GetTableSelect(i) && i != nTab )
- pRedoDoc->AddUndoTab( i, i );
+ itr = rMark.begin();
+ for (; itr != itrEnd; ++itr)
+ if ( *itr != nTab )
+ pRedoDoc->AddUndoTab( *itr, *itr );
}
ScRange aCopyRange = aMarkRange;
aCopyRange.aStart.SetTab(0);
@@ -518,12 +519,12 @@ void ScViewFunc::DoSheetConversion( const ScConversionParam& rConvParam, sal_Boo
if ( rMark.GetSelectCount() > 1 )
{
- SCTAB nTabCount = pDoc->GetTableCount();
- for (SCTAB i=0; i<nTabCount; i++)
- if ( rMark.GetTableSelect(i) && i != nTab )
+ ScMarkData::iterator itr = rMark.begin(), itrEnd = rMark.end();
+ for (; itr != itrEnd; ++itr)
+ if ( *itr != nTab )
{
- pUndoDoc->AddUndoTab( i, i );
- pRedoDoc->AddUndoTab( i, i );
+ pUndoDoc->AddUndoTab( *itr, *itr );
+ pRedoDoc->AddUndoTab( *itr, *itr );
}
}
}
diff --git a/sc/source/ui/view/viewfunc.cxx b/sc/source/ui/view/viewfunc.cxx
index fbda435..cd9a34a 100644
--- a/sc/source/ui/view/viewfunc.cxx
+++ b/sc/source/ui/view/viewfunc.cxx
@@ -360,7 +360,6 @@ void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab, const String& rS
{
ScDocument* pDoc = GetViewData()->GetDocument();
ScMarkData& rMark = GetViewData()->GetMarkData();
- SCTAB nTabCount = pDoc->GetTableCount();
SCTAB nSelCount = rMark.GetSelectCount();
SCTAB i;
if (bRecord && !pDoc->IsUndoEnabled())
@@ -389,42 +388,43 @@ void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab, const String& rS
pTabs = new SCTAB[nSelCount];
nUndoPos = 0;
- for (i=0; i<nTabCount; i++)
- if (rMark.GetTableSelect(i))
+ ScMarkData::iterator itr = rMark.begin(), itrEnd = rMark.end();
+ for (; itr != itrEnd; ++itr)
+ {
+ i = *itr;
+ pTabs[nUndoPos] = i;
+ ScBaseCell* pDocCell;
+ pDoc->GetCell( nCol, nRow, i, pDocCell );
+ if ( pDocCell )
{
- pTabs[nUndoPos] = i;
- ScBaseCell* pDocCell;
- pDoc->GetCell( nCol, nRow, i, pDocCell );
- if ( pDocCell )
- {
- ppOldCells[nUndoPos] = pDocCell->CloneWithoutNote( *pDoc );
- if ( pDocCell->GetCellType() == CELLTYPE_EDIT )
- bEditDeleted = sal_True;
-
- sal_uInt8 nDocScript = pDoc->GetScriptType( nCol, nRow, i, pDocCell );
- if ( nOldScript == 0 )
- nOldScript = nDocScript;
- else if ( nDocScript != nOldScript )
- bEditDeleted = sal_True;
- }
- else
- {
- ppOldCells[nUndoPos] = NULL;
- }
-
- const SfxPoolItem* pItem;
- const ScPatternAttr* pPattern = pDoc->GetPattern(nCol, nRow, i);
- if ( SFX_ITEM_SET == pPattern->GetItemSet().GetItemState(
- ATTR_VALUE_FORMAT,false,&pItem) )
- {
- pHasFormat[nUndoPos] = sal_True;
- pOldFormats[nUndoPos] = ((const SfxUInt32Item*)pItem)->GetValue();
- }
- else
- pHasFormat[nUndoPos] = false;
+ ppOldCells[nUndoPos] = pDocCell->CloneWithoutNote( *pDoc );
+ if ( pDocCell->GetCellType() == CELLTYPE_EDIT )
+ bEditDeleted = sal_True;
+
+ sal_uInt8 nDocScript = pDoc->GetScriptType( nCol, nRow, i, pDocCell );
+ if ( nOldScript == 0 )
+ nOldScript = nDocScript;
+ else if ( nDocScript != nOldScript )
+ bEditDeleted = sal_True;
+ }
+ else
+ {
+ ppOldCells[nUndoPos] = NULL;
+ }
- ++nUndoPos;
+ const SfxPoolItem* pItem;
+ const ScPatternAttr* pPattern = pDoc->GetPattern(nCol, nRow, i);
+ if ( SFX_ITEM_SET == pPattern->GetItemSet().GetItemState(
+ ATTR_VALUE_FORMAT,false,&pItem) )
+ {
+ pHasFormat[nUndoPos] = sal_True;
+ pOldFormats[nUndoPos] = ((const SfxUInt32Item*)pItem)->GetValue();
}
+ else
+ pHasFormat[nUndoPos] = false;
+
+ ++nUndoPos;
+ }
OSL_ENSURE( nUndoPos==nSelCount, "nUndoPos!=nSelCount" );
@@ -472,9 +472,7 @@ void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab, const String& rS
sal_Bool bNumFmtChanged = false;
if ( bFormula )
{ // Formel, compile mit AutoCorrection
- for (i=0; i<nTabCount; i++)
- if (rMark.GetTableSelect(i))
- break;
+ i = rMark.GetFirstSelected();
ScAddress aPos( nCol, nRow, i );
ScCompiler aComp( pDoc, aPos);
aComp.SetGrammar(pDoc->GetGrammar());
@@ -585,63 +583,61 @@ void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab, const String& rS
delete pArr;
sal_Bool bAutoCalc = pDoc->GetAutoCalc();
SvNumberFormatter* pFormatter = pDoc->GetFormatTable();
- for ( ; i<nTabCount; i++)
+ ScMarkData::iterator itr = rMark.begin(), itrEnd = rMark.end();
+ for (; itr != itrEnd; ++itr)
{
- if (rMark.GetTableSelect(i))
+ i = *itr;
+ aPos.SetTab( i );
+ sal_uLong nIndex = (sal_uLong) ((SfxUInt32Item*) pDoc->GetAttr(
+ nCol, nRow, i, ATTR_VALUE_FORMAT ))->GetValue();
+ if ( pFormatter->GetType( nIndex ) == NUMBERFORMAT_TEXT ||
+ ( ( rString.GetChar(0) == '+' || rString.GetChar(0) == '-' ) && nError && rString.Equals( aFormula ) ) )
{
- aPos.SetTab( i );
- sal_uLong nIndex = (sal_uLong) ((SfxUInt32Item*) pDoc->GetAttr(
- nCol, nRow, i, ATTR_VALUE_FORMAT ))->GetValue();
- if ( pFormatter->GetType( nIndex ) == NUMBERFORMAT_TEXT ||
- ( ( rString.GetChar(0) == '+' || rString.GetChar(0) == '-' ) && nError && rString.Equals( aFormula ) ) )
+ if ( pData )
{
- if ( pData )
- {
- ScEditCell* pCell = new ScEditCell( pData, pDoc, NULL );
- pDoc->PutCell( aPos, pCell );
- }
- else
- {
- ScStringCell* pCell = new ScStringCell( aFormula );
- pDoc->PutCell( aPos, pCell );
- }
+ ScEditCell* pCell = new ScEditCell( pData, pDoc, NULL );
+ pDoc->PutCell( aPos, pCell );
}
else
{
- DELETEZ(pUndoData);
- ScFormulaCell* pCell = new ScFormulaCell( aCell, *pDoc, aPos );
- if ( nError )
- {
- pCell->GetCode()->DelRPN();
- pCell->SetErrCode( nError );
- if(pCell->GetCode()->IsHyperLink())
- pCell->GetCode()->SetHyperLink(false);
- }
+ ScStringCell* pCell = new ScStringCell( aFormula );
pDoc->PutCell( aPos, pCell );
- if ( !bAutoCalc )
- { // einmal nur die Zelle berechnen und wieder dirty setzen
- pCell->Interpret();
- pCell->SetDirtyVar();
- pDoc->PutInFormulaTree( pCell );
- }
}
-
+ }
+ else
+ {
+ DELETEZ(pUndoData);
+ ScFormulaCell* pCell = new ScFormulaCell( aCell, *pDoc, aPos );
+ if ( nError )
+ {
+ pCell->GetCode()->DelRPN();
+ pCell->SetErrCode( nError );
+ if(pCell->GetCode()->IsHyperLink())
+ pCell->GetCode()->SetHyperLink(false);
+ }
+ pDoc->PutCell( aPos, pCell );
+ if ( !bAutoCalc )
+ { // einmal nur die Zelle berechnen und wieder dirty setzen
+ pCell->Interpret();
+ pCell->SetDirtyVar();
+ pDoc->PutInFormulaTree( pCell );
+ }
}
}
}
else
{
- for (i=0; i<nTabCount; i++)
- if (rMark.GetTableSelect(i))
- if (pDoc->SetString( nCol, nRow, i, rString ))
- bNumFmtChanged = sal_True;
+ ScMarkData::iterator itr = rMark.begin(), itrEnd = rMark.end();
+ for (; itr != itrEnd; ++itr)
+ if (pDoc->SetString( nCol, nRow, *itr, rString ))
+ bNumFmtChanged = true;
}
// row height must be changed if new text has a different script type
- for (i=0; i<nTabCount && !bEditDeleted; i++)
- if (rMark.GetTableSelect(i))
- if ( pDoc->GetScriptType( nCol, nRow, i ) != nOldScript )
- bEditDeleted = sal_True;
+ ScMarkData::iterator itr = rMark.begin(), itrEnd = rMark.end();
+ for (; itr != itrEnd && !bEditDeleted; ++itr)
+ if ( pDoc->GetScriptType( nCol, nRow, *itr ) != nOldScript )
+ bEditDeleted = true;
HideAllCursors();
@@ -660,9 +656,9 @@ void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab, const String& rS
rString, pUndoData ) );
}
- for (i=0; i<nTabCount; i++)
- if (rMark.GetTableSelect(i))
- pDocSh->PostPaintCell( nCol, nRow, i );
+ itr = rMark.begin();
+ for (; itr != itrEnd; ++itr)
+ pDocSh->PostPaintCell( nCol, nRow, *itr );
ShowAllCursors();
@@ -673,12 +669,10 @@ void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab, const String& rS
if ( pModelObj && pModelObj->HasChangesListeners() )
{
ScRangeList aChangeRanges;
- for ( i = 0; i < nTabCount; ++i )
+ itr = rMark.begin();
+ for (; itr != itrEnd; ++itr)
{
- if ( rMark.GetTableSelect( i ) )
- {
- aChangeRanges.Append( ScRange( nCol, nRow, i ) );
- }
+ aChangeRanges.Append( ScRange( nCol, nRow, *itr ) );
}
pModelObj->NotifyChanges( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "cell-change" ) ), aChangeRanges );
}
@@ -793,9 +787,7 @@ void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab, const EditTextOb
// Undo
//
- SCTAB nTabCount = pDoc->GetTableCount();
SCTAB nSelCount = rMark.GetSelectCount();
- SCTAB i;
ScBaseCell** ppOldCells = NULL;
SCTAB* pTabs = NULL;
SCTAB nPos = 0;
@@ -806,15 +798,15 @@ void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab, const EditTextOb
pTabs = new SCTAB[nSelCount];
nPos = 0;
- for (i=0; i<nTabCount; i++)
- if (rMark.GetTableSelect(i))
- {
- pTabs[nPos] = i;
- ScBaseCell* pDocCell;
- pDoc->GetCell( nCol, nRow, i, pDocCell );
- ppOldCells[nPos] = pDocCell ? pDocCell->CloneWithoutNote( *pDoc ) : 0;
- ++nPos;
- }
+ ScMarkData::iterator itr = rMark.begin(), itrEnd = rMark.end();
+ for (; itr != itrEnd; ++itr)
+ {
+ pTabs[nPos] = *itr;
+ ScBaseCell* pDocCell;
+ pDoc->GetCell( nCol, nRow, *itr, pDocCell );
+ ppOldCells[nPos] = pDocCell ? pDocCell->CloneWithoutNote( *pDoc ) : 0;
+ ++nPos;
+ }
OSL_ENSURE( nPos==nSelCount, "nPos!=nSelCount" );
@@ -837,9 +829,9 @@ void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab, const EditTextOb
}
else
{
- for (i=0; i<nTabCount; i++)
- if (rMark.GetTableSelect(i))
- pDoc->PutCell( nCol, nRow, i, new ScEditCell( pData, pDoc, NULL ) );
+ ScMarkData::iterator itr = rMark.begin(), itrEnd = rMark.end();
+ for (; itr != itrEnd; ++itr)
+ pDoc->PutCell( nCol, nRow, *itr, new ScEditCell( pData, pDoc, NULL ) );
if ( bRecord )
{ // wg. ChangeTrack erst jetzt
@@ -853,9 +845,9 @@ void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab, const EditTextOb
AdjustRowHeight(nRow,nRow);
- for (i=0; i<nTabCount; i++)
- if (rMark.GetTableSelect(i))
- pDocSh->PostPaintCell( nCol, nRow, i );
+ itr = rMark.begin();
+ for (; itr != itrEnd; ++itr)
+ pDocSh->PostPaintCell( nCol, nRow, *itr );
ShowAllCursors();
@@ -866,12 +858,10 @@ void ScViewFunc::EnterData( SCCOL nCol, SCROW nRow, SCTAB nTab, const EditTextOb
if ( pModelObj && pModelObj->HasChangesListeners() )
{
ScRangeList aChangeRanges;
- for ( i = 0; i < nTabCount; ++i )
+ itr = rMark.begin();
+ for (; itr != itrEnd; ++itr)
{
- if ( rMark.GetTableSelect( i ) )
- {
- aChangeRanges.Append( ScRange( nCol, nRow, i ) );
- }
+ aChangeRanges.Append( ScRange( nCol, nRow, *itr ) );
}
pModelObj->NotifyChanges( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "cell-change" ) ), aChangeRanges );
}
@@ -1220,9 +1210,10 @@ void ScViewFunc::ApplyPatternLines( const ScPatternAttr& rAttr, const SvxBoxItem
SCTAB nStartTab = aMarkRange.aStart.Tab();
SCTAB nTabCount = pDoc->GetTableCount();
pUndoDoc->InitUndo( pDoc, nStartTab, nStartTab );
- for (SCTAB i=0; i<nTabCount; i++)
- if (i != nStartTab && aFuncMark.GetTableSelect(i))
- pUndoDoc->AddUndoTab( i, i );
+ ScMarkData::iterator itr = aFuncMark.begin(), itrEnd = aFuncMark.end();
+ for (; itr != itrEnd; ++itr)
+ if (*itr != nStartTab)
+ pUndoDoc->AddUndoTab( *itr, *itr );
ScRange aCopyRange = aMarkRange;
aCopyRange.aStart.SetTab(0);
@@ -1305,15 +1296,13 @@ void ScViewFunc::ApplySelectionPattern( const ScPatternAttr& rAttr,
ScRange aMarkRange;
aFuncMark.GetMultiMarkArea( aMarkRange );
SCTAB nTabCount = pDoc->GetTableCount();
- for ( SCTAB i = 0; i < nTabCount; ++i )
+ ScMarkData::iterator itr = aFuncMark.begin(), itrEnd = aFuncMark.end();
+ for (; itr != itrEnd; ++itr)
{
- if ( aFuncMark.GetTableSelect( i ) )
- {
- ScRange aChangeRange( aMarkRange );
- aChangeRange.aStart.SetTab( i );
- aChangeRange.aEnd.SetTab( i );
- aChangeRanges.Append( aChangeRange );
- }
+ ScRange aChangeRange( aMarkRange );
+ aChangeRange.aStart.SetTab( *itr );
+ aChangeRange.aEnd.SetTab( *itr );
+ aChangeRanges.Append( aChangeRange );
}
SCCOL nStartCol = aMarkRange.aStart.Col();
@@ -1333,9 +1322,10 @@ void ScViewFunc::ApplySelectionPattern( const ScPatternAttr& rAttr,
ScDocument* pUndoDoc = new ScDocument( SCDOCMODE_UNDO );
pUndoDoc->InitUndo( pDoc, nStartTab, nStartTab );
- for (SCTAB i=0; i<nTabCount; i++)
- if (i != nStartTab && aFuncMark.GetTableSelect(i))
- pUndoDoc->AddUndoTab( i, i );
+ itr = aFuncMark.begin();
+ for (; itr != itrEnd; ++itr)
+ if (*itr != nStartTab)
+ pUndoDoc->AddUndoTab( *itr, *itr );
pDoc->CopyToDocument( aCopyRange, IDF_ATTRIB, bMulti, pUndoDoc, &aFuncMark );
aFuncMark.MarkToMulti();
@@ -1505,9 +1495,10 @@ void ScViewFunc::SetStyleSheetToMarked( SfxStyleSheet* pStyleSheet, sal_Bool bRe
SCTAB nTab = pViewData->GetTabNo();
ScDocument* pUndoDoc = new ScDocument( SCDOCMODE_UNDO );
pUndoDoc->InitUndo( pDoc, nTab, nTab );
- for (SCTAB i=0; i<nTabCount; i++)
- if (i != nTab && aFuncMark.GetTableSelect(i))
- pUndoDoc->AddUndoTab( i, i );
+ ScMarkData::iterator itr = aFuncMark.begin(), itrEnd = aFuncMark.end();
+ for (; itr != itrEnd; ++itr)
+ if (*itr != nTab)
+ pUndoDoc->AddUndoTab( *itr, *itr );
ScRange aCopyRange = aMarkRange;
aCopyRange.aStart.SetTab(0);
@@ -1537,9 +1528,10 @@ void ScViewFunc::SetStyleSheetToMarked( SfxStyleSheet* pStyleSheet, sal_Bool bRe
{
ScDocument* pUndoDoc = new ScDocument( SCDOCMODE_UNDO );
pUndoDoc->InitUndo( pDoc, nTab, nTab );
- for (SCTAB i=0; i<nTabCount; i++)
- if (i != nTab && aFuncMark.GetTableSelect(i))
- pUndoDoc->AddUndoTab( i, i );
+ ScMarkData::iterator itr = aFuncMark.begin(), itrEnd = aFuncMark.end();
+ for (; itr != itrEnd; ++itr)
+ if (*itr != nTab)
+ pUndoDoc->AddUndoTab( *itr, *itr );
ScRange aCopyRange( nCol, nRow, 0, nCol, nRow, nTabCount-1 );
pDoc->CopyToDocument( aCopyRange, IDF_ATTRIB, false, pUndoDoc );
@@ -1553,9 +1545,10 @@ void ScViewFunc::SetStyleSheetToMarked( SfxStyleSheet* pStyleSheet, sal_Bool bRe
new ScUndoSelectionStyle( pDocSh, aUndoMark, aMarkRange, aName, pUndoDoc ) );
}
- for (SCTAB i=0; i<nTabCount; i++)
- if (aFuncMark.GetTableSelect(i))
- pDoc->ApplyStyle( nCol, nRow, i, (ScStyleSheet&)*pStyleSheet );
+ ScMarkData::iterator itr = aFuncMark.begin(), itrEnd = aFuncMark.end();
+ for (; itr != itrEnd; ++itr)
+ if (*itr != nTab)
+ pDoc->ApplyStyle( nCol, nRow, *itr, (ScStyleSheet&)*pStyleSheet );
if (!AdjustBlockHeight())
pViewData->GetDocShell()->PostPaintCell( nCol, nRow, nTab );
@@ -1985,9 +1978,9 @@ void ScViewFunc::DeleteContents( sal_uInt16 nFlags, sal_Bool bRecord )
if ( nFlags & IDF_OBJECTS )
{
bObjects = sal_True;
- SCTAB nTabCount = pDoc->GetTableCount();
- for (SCTAB nTab=0; nTab<nTabCount; nTab++)
- if (aFuncMark.GetTableSelect(nTab) && pDoc->IsTabProtected(nTab))
+ ScMarkData::iterator itr = aFuncMark.begin(), itrEnd = aFuncMark.end();
+ for (; itr != itrEnd; ++itr)
+ if (pDoc->IsTabProtected(*itr))
bObjects = false;
}
@@ -2022,9 +2015,10 @@ void ScViewFunc::DeleteContents( sal_uInt16 nFlags, sal_Bool bRecord )
SCTAB nTab = aMarkRange.aStart.Tab();
pUndoDoc->InitUndo( pDoc, nTab, nTab );
SCTAB nTabCount = pDoc->GetTableCount();
- for (SCTAB i=0; i<nTabCount; i++)
- if (i != nTab && aFuncMark.GetTableSelect(i))
- pUndoDoc->AddUndoTab( i, i );
+ ScMarkData::iterator itr = aFuncMark.begin(), itrEnd = aFuncMark.end();
+ for (; itr != itrEnd; ++itr)
+ if (*itr != nTab)
+ pUndoDoc->AddUndoTab( *itr, *itr );
ScRange aCopyRange = aExtendedRange;
aCopyRange.aStart.SetTab(0);
aCopyRange.aEnd.SetTab(nTabCount-1);
@@ -2109,7 +2103,6 @@ void ScViewFunc::SetWidthOrHeight( sal_Bool bWidth, SCCOLROW nRangeCnt, SCCOLROW
ScDocShell* pDocSh = GetViewData()->GetDocShell();
ScDocument* pDoc = pDocSh->GetDocument();
- SCTAB nTabCount = pDoc->GetTableCount();
SCTAB nFirstTab = pMarkData->GetFirstSelected();
SCTAB nCurTab = GetViewData()->GetTabNo();
SCTAB nTab;
@@ -2119,22 +2112,20 @@ void ScViewFunc::SetWidthOrHeight( sal_Bool bWidth, SCCOLROW nRangeCnt, SCCOLROW
ScDocShellModificator aModificator( *pDocSh );
sal_Bool bAllowed = sal_True;
- for (nTab=0; nTab<nTabCount && bAllowed; nTab++)
- if (pMarkData->GetTableSelect(nTab))
+ ScMarkData::iterator itr = pMarkData->begin(), itrEnd = pMarkData->end();
+ for (; itr != itrEnd && bAllowed; ++itr)
+ for ( SCCOLROW i=0; i<nRangeCnt && bAllowed; i++ )
{
- for ( SCCOLROW i=0; i<nRangeCnt && bAllowed; i++ )
- {
- sal_Bool bOnlyMatrix;
- if (bWidth)
- bAllowed = pDoc->IsBlockEditable( nTab,
- static_cast<SCCOL>(pRanges[2*i]),0,
- static_cast<SCCOL>(pRanges[2*i+1]),MAXROW,
- &bOnlyMatrix ) || bOnlyMatrix;
- else
- bAllowed = pDoc->IsBlockEditable( nTab, 0,pRanges[2*i],
- MAXCOL,pRanges[2*i+1], &bOnlyMatrix ) ||
- bOnlyMatrix;
- }
+ sal_Bool bOnlyMatrix;
+ if (bWidth)
+ bAllowed = pDoc->IsBlockEditable( *itr,
+ static_cast<SCCOL>(pRanges[2*i]),0,
+ static_cast<SCCOL>(pRanges[2*i+1]),MAXROW,
+ &bOnlyMatrix ) || bOnlyMatrix;
+ else
+ bAllowed = pDoc->IsBlockEditable( *itr, 0,pRanges[2*i],
+ MAXCOL,pRanges[2*i+1], &bOnlyMatrix ) ||
+ bOnlyMatrix;
}
// Allow users to resize cols/rows in readonly docs despite the r/o state.
@@ -2164,28 +2155,28 @@ void ScViewFunc::SetWidthOrHeight( sal_Bool bWidth, SCCOLROW nRangeCnt, SCCOLROW
pDoc->BeginDrawUndo(); // Drawing Updates
pUndoDoc = new ScDocument( SCDOCMODE_UNDO );
- for (nTab=0; nTab<nTabCount; nTab++)
- if (pMarkData->GetTableSelect(nTab))
+ itr = pMarkData->begin();
+ for (; itr != itrEnd; ++itr)
+ {
+ if (bWidth)
{
- if (bWidth)
- {
- if ( nTab == nFirstTab )
- pUndoDoc->InitUndo( pDoc, nTab, nTab, sal_True, false );
- else
- pUndoDoc->AddUndoTab( nTab, nTab, sal_True, false );
- pDoc->CopyToDocument( static_cast<SCCOL>(nStart), 0, nTab,
- static_cast<SCCOL>(nEnd), MAXROW, nTab, IDF_NONE,
- false, pUndoDoc );
- }
+ if ( *itr == nFirstTab )
+ pUndoDoc->InitUndo( pDoc, *itr, *itr, true, false );
else
- {
- if ( nTab == nFirstTab )
- pUndoDoc->InitUndo( pDoc, nTab, nTab, false, sal_True );
- else
- pUndoDoc->AddUndoTab( nTab, nTab, false, sal_True );
- pDoc->CopyToDocument( 0, nStart, nTab, MAXCOL, nEnd, nTab, IDF_NONE, false, pUndoDoc );
- }
+ pUndoDoc->AddUndoTab( *itr, *itr, true, false );
+ pDoc->CopyToDocument( static_cast<SCCOL>(nStart), 0, *itr,
+ static_cast<SCCOL>(nEnd), MAXROW, *itr, IDF_NONE,
+ false, pUndoDoc );
+ }
+ else
+ {
+ if ( *itr == nFirstTab )
+ pUndoDoc->InitUndo( pDoc, *itr, *itr, false, true );
+ else
+ pUndoDoc->AddUndoTab( *itr, *itr, false, true );
+ pDoc->CopyToDocument( 0, nStart, *itr, MAXCOL, nEnd, *itr, IDF_NONE, false, pUndoDoc );
}
+ }
pUndoRanges = new SCCOLROW[ 2*nRangeCnt ];
memmove( pUndoRanges, pRanges, 2*nRangeCnt*sizeof(SCCOLROW) );
@@ -2202,110 +2193,111 @@ void ScViewFunc::SetWidthOrHeight( sal_Bool bWidth, SCCOLROW nRangeCnt, SCCOLROW
sal_Bool bShow = nSizeTwips > 0 || eMode != SC_SIZE_DIRECT;
sal_Bool bOutline = false;
- for (nTab=0; nTab<nTabCount; nTab++)
- if (pMarkData->GetTableSelect(nTab))
+ itr = pMarkData->begin();
+ for (; itr != itrEnd; ++itr)
+ {
+ nTab = *itr;
+ const SCCOLROW* pTabRanges = pRanges;
+
+ pDoc->InitializeNoteCaptions( nTab );
+ for (SCCOLROW nRangeNo=0; nRangeNo<nRangeCnt; nRangeNo++)
{
- const SCCOLROW* pTabRanges = pRanges;
+ SCCOLROW nStartNo = *(pTabRanges++);
+ SCCOLROW nEndNo = *(pTabRanges++);
- pDoc->InitializeNoteCaptions( nTab );
- for (SCCOLROW nRangeNo=0; nRangeNo<nRangeCnt; nRangeNo++)
+ if ( !bWidth ) // Hoehen immer blockweise
{
- SCCOLROW nStartNo = *(pTabRanges++);
- SCCOLROW nEndNo = *(pTabRanges++);
-
- if ( !bWidth ) // Hoehen immer blockweise
+ if ( eMode==SC_SIZE_OPTIMAL || eMode==SC_SIZE_VISOPT )
{
- if ( eMode==SC_SIZE_OPTIMAL || eMode==SC_SIZE_VISOPT )
+ sal_Bool bAll = ( eMode==SC_SIZE_OPTIMAL );
+ if (!bAll)
{
- sal_Bool bAll = ( eMode==SC_SIZE_OPTIMAL );
- if (!bAll)
+ // fuer alle eingeblendeten CR_MANUALSIZE loeschen,
+ // dann SetOptimalHeight mit bShrink = FALSE
+ for (SCROW nRow = nStartNo; nRow <= nEndNo; ++nRow)
{
- // fuer alle eingeblendeten CR_MANUALSIZE loeschen,
- // dann SetOptimalHeight mit bShrink = FALSE
- for (SCROW nRow = nStartNo; nRow <= nEndNo; ++nRow)
+ SCROW nLastRow = nRow;
+ if (pDoc->RowHidden(nRow, nTab, NULL, &nLastRow))
{
- SCROW nLastRow = nRow;
- if (pDoc->RowHidden(nRow, nTab, NULL, &nLastRow))
- {
- nRow = nLastRow;
- continue;
- }
-
- sal_uInt8 nOld = pDoc->GetRowFlags(nRow, nTab);
- if (nOld & CR_MANUALSIZE)
- pDoc->SetRowFlags(nRow, nTab, nOld & ~CR_MANUALSIZE);
+ nRow = nLastRow;
+ continue;
}
- }
-
- double nPPTX = GetViewData()->GetPPTX();
- double nPPTY = GetViewData()->GetPPTY();
- Fraction aZoomX = GetViewData()->GetZoomX();
- Fraction aZoomY = GetViewData()->GetZoomY();
- ScSizeDeviceProvider aProv(pDocSh);
- if (aProv.IsPrinter())
- {
- nPPTX = aProv.GetPPTX();
- nPPTY = aProv.GetPPTY();
- aZoomX = aZoomY = Fraction( 1, 1 );
+ sal_uInt8 nOld = pDoc->GetRowFlags(nRow, nTab);
+ if (nOld & CR_MANUALSIZE)
+ pDoc->SetRowFlags(nRow, nTab, nOld & ~CR_MANUALSIZE);
}
+ }
- pDoc->SetOptimalHeight( nStartNo, nEndNo, nTab, nSizeTwips, aProv.GetDevice(),
- nPPTX, nPPTY, aZoomX, aZoomY, bAll );
- if (bAll)
- pDoc->ShowRows( nStartNo, nEndNo, nTab, sal_True );
+ double nPPTX = GetViewData()->GetPPTX();
+ double nPPTY = GetViewData()->GetPPTY();
+ Fraction aZoomX = GetViewData()->GetZoomX();
+ Fraction aZoomY = GetViewData()->GetZoomY();
- // Manual-Flag wird bei bAll=sal_True schon in SetOptimalHeight gesetzt
- // (an bei Extra-Height, sonst aus).
- }
- else if ( eMode==SC_SIZE_DIRECT )
+ ScSizeDeviceProvider aProv(pDocSh);
+ if (aProv.IsPrinter())
{
- if (nSizeTwips)
- {
- pDoc->SetRowHeightRange( nStartNo, nEndNo, nTab, nSizeTwips );
- pDoc->SetManualHeight( nStartNo, nEndNo, nTab, sal_True ); // height was set manually
- }
- pDoc->ShowRows( nStartNo, nEndNo, nTab, nSizeTwips != 0 );
+ nPPTX = aProv.GetPPTX();
+ nPPTY = aProv.GetPPTY();
+ aZoomX = aZoomY = Fraction( 1, 1 );
}
- else if ( eMode==SC_SIZE_SHOW )
- {
+
+ pDoc->SetOptimalHeight( nStartNo, nEndNo, nTab, nSizeTwips, aProv.GetDevice(),
+ nPPTX, nPPTY, aZoomX, aZoomY, bAll );
+ if (bAll)
pDoc->ShowRows( nStartNo, nEndNo, nTab, sal_True );
+
+ // Manual-Flag wird bei bAll=sal_True schon in SetOptimalHeight gesetzt
+ // (an bei Extra-Height, sonst aus).
+ }
+ else if ( eMode==SC_SIZE_DIRECT )
+ {
+ if (nSizeTwips)
+ {
+ pDoc->SetRowHeightRange( nStartNo, nEndNo, nTab, nSizeTwips );
+ pDoc->SetManualHeight( nStartNo, nEndNo, nTab, sal_True ); // height was set manually
}
+ pDoc->ShowRows( nStartNo, nEndNo, nTab, nSizeTwips != 0 );
}
- else // Spaltenbreiten
+ else if ( eMode==SC_SIZE_SHOW )
{
- for (SCCOL nCol=static_cast<SCCOL>(nStartNo); nCol<=static_cast<SCCOL>(nEndNo); nCol++)
+ pDoc->ShowRows( nStartNo, nEndNo, nTab, sal_True );
+ }
+ }
+ else // Spaltenbreiten
+ {
+ for (SCCOL nCol=static_cast<SCCOL>(nStartNo); nCol<=static_cast<SCCOL>(nEndNo); nCol++)
+ {
+ if ( eMode != SC_SIZE_VISOPT || !pDoc->ColHidden(nCol, nTab) )
{
- if ( eMode != SC_SIZE_VISOPT || !pDoc->ColHidden(nCol, nTab) )
- {
- sal_uInt16 nThisSize = nSizeTwips;
+ sal_uInt16 nThisSize = nSizeTwips;
- if ( eMode==SC_SIZE_OPTIMAL || eMode==SC_SIZE_VISOPT )
- nThisSize = nSizeTwips + GetOptimalColWidth( nCol, nTab, bFormula );
- if ( nThisSize )
- pDoc->SetColWidth( nCol, nTab, nThisSize );
+ if ( eMode==SC_SIZE_OPTIMAL || eMode==SC_SIZE_VISOPT )
+ nThisSize = nSizeTwips + GetOptimalColWidth( nCol, nTab, bFormula );
+ if ( nThisSize )
+ pDoc->SetColWidth( nCol, nTab, nThisSize );
- pDoc->ShowCol( nCol, nTab, bShow );
- }
+ pDoc->ShowCol( nCol, nTab, bShow );
}
}
+ }
// Outline anpassen
- if (bWidth)
- {
- if ( pDoc->UpdateOutlineCol( static_cast<SCCOL>(nStartNo),
- static_cast<SCCOL>(nEndNo), nTab, bShow ) )
- bOutline = sal_True;
- }
- else
- {
- if ( pDoc->UpdateOutlineRow( nStartNo, nEndNo, nTab, bShow ) )
- bOutline = sal_True;
- }
+ if (bWidth)
+ {
+ if ( pDoc->UpdateOutlineCol( static_cast<SCCOL>(nStartNo),
+ static_cast<SCCOL>(nEndNo), nTab, bShow ) )
+ bOutline = sal_True;
+ }
+ else
+ {
+ if ( pDoc->UpdateOutlineRow( nStartNo, nEndNo, nTab, bShow ) )
+ bOutline = sal_True;
}
- pDoc->SetDrawPageSize(nTab);
}
+ pDoc->SetDrawPageSize(nTab);
+ }
if (!bOutline)
@@ -2320,9 +2312,9 @@ void ScViewFunc::SetWidthOrHeight( sal_Bool bWidth, SCCOLROW nRangeCnt, SCCOLROW
pUndoTab, eMode, nSizeTwips, bWidth ) );
}
- for (nTab=0; nTab<nTabCount; nTab++)
- if (pMarkData->GetTableSelect(nTab))
- pDoc->UpdatePageBreaks( nTab );
+ itr = pMarkData->begin();
+ for (; itr != itrEnd; ++itr)
+ pDoc->UpdatePageBreaks( *itr );
GetViewData()->GetView()->UpdateScrollBars();
@@ -2330,29 +2322,30 @@ void ScViewFunc::SetWidthOrHeight( sal_Bool bWidth, SCCOLROW nRangeCnt, SCCOLROW
{
HideCursor();
- for (nTab=0; nTab<nTabCount; nTab++)
- if (pMarkData->GetTableSelect(nTab))
+ itr = pMarkData->begin();
+ for (; itr != itrEnd; ++itr)
+ {
+ nTab = *itr;
+ if (bWidth)
{
- if (bWidth)
- {
- if (pDoc->HasAttrib( static_cast<SCCOL>(nStart),0,nTab,
- static_cast<SCCOL>(nEnd),MAXROW,nTab,
- HASATTR_MERGED | HASATTR_OVERLAPPED ))
- nStart = 0;
- if (nStart > 0) // weiter oben anfangen wegen Linien und Cursor
- --nStart;
- pDocSh->PostPaint( static_cast<SCCOL>(nStart), 0, nTab,
- MAXCOL, MAXROW, nTab, PAINT_GRID | PAINT_TOP );
- }
- else
- {
- if (pDoc->HasAttrib( 0,nStart,nTab, MAXCOL,nEnd,nTab, HASATTR_MERGED | HASATTR_OVERLAPPED ))
- nStart = 0;
- if (nStart != 0)
- --nStart;
- pDocSh->PostPaint( 0, nStart, nTab, MAXCOL, MAXROW, nTab, PAINT_GRID | PAINT_LEFT );
- }
+ if (pDoc->HasAttrib( static_cast<SCCOL>(nStart),0,nTab,
+ static_cast<SCCOL>(nEnd),MAXROW,nTab,
+ HASATTR_MERGED | HASATTR_OVERLAPPED ))
+ nStart = 0;
+ if (nStart > 0) // weiter oben anfangen wegen Linien und Cursor
+ --nStart;
+ pDocSh->PostPaint( static_cast<SCCOL>(nStart), 0, nTab,
+ MAXCOL, MAXROW, nTab, PAINT_GRID | PAINT_TOP );
}
+ else
+ {
+ if (pDoc->HasAttrib( 0,nStart,nTab, MAXCOL,nEnd,nTab, HASATTR_MERGED | HASATTR_OVERLAPPED ))
+ nStart = 0;
+ if (nStart != 0)
+ --nStart;
+ pDocSh->PostPaint( 0, nStart, nTab, MAXCOL, MAXROW, nTab, PAINT_GRID | PAINT_LEFT );
+ }
+ }
pDocSh->UpdateOle(GetViewData());
if( !pDocSh->IsReadOnly() )
@@ -2368,19 +2361,18 @@ void ScViewFunc::SetWidthOrHeight( sal_Bool bWidth, SCCOLROW nRangeCnt, SCCOLROW
if ( pModelObj && pModelObj->HasChangesListeners() )
{
ScRangeList aChangeRanges;
- for ( nTab = 0; nTab < nTabCount; ++nTab )
+ itr = pMarkData->begin();
+ for (; itr != itrEnd; ++itr)
{
- if ( pMarkData->GetTableSelect( nTab ) )
+ nTab = *itr;
+ const SCCOLROW* pTabRanges = pRanges;
+ for ( SCCOLROW nRange = 0; nRange < nRangeCnt; ++nRange )
{
- const SCCOLROW* pTabRanges = pRanges;
- for ( SCCOLROW nRange = 0; nRange < nRangeCnt; ++nRange )
+ SCCOL nStartCol = static_cast< SCCOL >( *(pTabRanges++) );
+ SCCOL nEndCol = static_cast< SCCOL >( *(pTabRanges++) );
+ for ( SCCOL nCol = nStartCol; nCol <= nEndCol; ++nCol )
{
- SCCOL nStartCol = static_cast< SCCOL >( *(pTabRanges++) );
- SCCOL nEndCol = static_cast< SCCOL >( *(pTabRanges++) );
- for ( SCCOL nCol = nStartCol; nCol <= nEndCol; ++nCol )
- {
- aChangeRanges.Append( ScRange( nCol, 0, nTab ) );
- }
+ aChangeRanges.Append( ScRange( nCol, 0, nTab ) );
}
}
}
@@ -2583,10 +2575,9 @@ void ScViewFunc::ProtectSheet( SCTAB nTab, const ScTableProtection& rProtect )
pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo );
}
- SCTAB nCount = pDocSh->GetDocument()->GetTableCount();
- for ( SCTAB i=0; i<nCount; i++ )
- if ( rMark.GetTableSelect(i) )
- aFunc.ProtectSheet(i, rProtect);
+ ScMarkData::iterator itr = rMark.begin(), itrEnd = rMark.end();
+ for (; itr != itrEnd; ++itr)
+ aFunc.ProtectSheet(*itr, rProtect);
if (bUndo)
pDocSh->GetUndoManager()->LeaveListAction();
@@ -2614,10 +2605,9 @@ void ScViewFunc::Protect( SCTAB nTab, const String& rPassword )
pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo );
}
- SCTAB nCount = pDocSh->GetDocument()->GetTableCount();
- for ( SCTAB i=0; i<nCount; i++ )
- if ( rMark.GetTableSelect(i) )
- aFunc.Protect( i, rPassword, false );
+ ScMarkData::iterator itr = rMark.begin(), itrEnd = rMark.end();
+ for (; itr != itrEnd; ++itr)
+ aFunc.Protect( *itr, rPassword, false );
if (bUndo)
pDocSh->GetUndoManager()->LeaveListAction();
@@ -2647,10 +2637,9 @@ sal_Bool ScViewFunc::Unprotect( SCTAB nTab, const String& rPassword )
pDocSh->GetUndoManager()->EnterListAction( aUndo, aUndo );
}
- SCTAB nCount = pDocSh->GetDocument()->GetTableCount();
- for ( SCTAB i=0; i<nCount; i++ )
- if ( rMark.GetTableSelect(i) )
- if ( aFunc.Unprotect( i, rPassword, false ) )
+ ScMarkData::iterator itr = rMark.begin(), itrEnd = rMark.end();
+ for (; itr != itrEnd; ++itr)
+ if ( aFunc.Unprotect( *itr, rPassword, false ) )
bChanged = sal_True;
if (bUndo)
diff --git a/sc/source/ui/view/viewutil.cxx b/sc/source/ui/view/viewutil.cxx
index c444ced..d11e601 100644
--- a/sc/source/ui/view/viewutil.cxx
+++ b/sc/source/ui/view/viewutil.cxx
@@ -259,24 +259,24 @@ void ScViewUtil::UnmarkFiltered( ScMarkData& rMark, ScDocument* pDoc )
SCROW nEndRow = aMultiArea.aEnd.Row();
bool bChanged = false;
- SCTAB nTabCount = pDoc->GetTableCount();
- for (SCTAB nTab=0; nTab<nTabCount; nTab++)
- if ( rMark.GetTableSelect(nTab ) )
+ ScMarkData::iterator itr = rMark.begin(), itrEnd = rMark.end();
+ for (; itr != itrEnd; ++itr)
+ {
+ SCTAB nTab = *itr;
+ for (SCROW nRow = nStartRow; nRow <= nEndRow; ++nRow)
{
- for (SCROW nRow = nStartRow; nRow <= nEndRow; ++nRow)
+ SCROW nLastRow = nRow;
+ if (pDoc->RowFiltered(nRow, nTab, NULL, &nLastRow))
{
- SCROW nLastRow = nRow;
- if (pDoc->RowFiltered(nRow, nTab, NULL, &nLastRow))
- {
- // use nStartCol/nEndCol, so the multi mark area isn't extended to all columns
- // (visible in repaint for indentation)
- rMark.SetMultiMarkArea(
- ScRange(nStartCol, nRow, nTab, nEndCol, nLastRow, nTab), false);
- bChanged = true;
- nRow = nLastRow;
- }
+ // use nStartCol/nEndCol, so the multi mark area isn't extended to all columns
+ // (visible in repaint for indentation)
+ rMark.SetMultiMarkArea(
+ ScRange(nStartCol, nRow, nTab, nEndCol, nLastRow, nTab), false);
+ bChanged = true;
+ nRow = nLastRow;
}
}
+ }
if ( bChanged && !rMark.HasAnyMultiMarks() )
rMark.ResetMark();
commit a290f627c45130f361277f7d84b1098dd2c54d4e
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Mon Jul 4 17:18:04 2011 +0200
add iterator to ScMarkData
diff --git a/sc/inc/markdata.hxx b/sc/inc/markdata.hxx
index 865907a..5b44945 100644
--- a/sc/inc/markdata.hxx
+++ b/sc/inc/markdata.hxx
@@ -116,6 +116,14 @@ public:
// adjust table marking:
void InsertTab( SCTAB nTab );
void DeleteTab( SCTAB nTab );
+
+ // iterators for table access
+ typedef std::set<SCTAB>::iterator iterator;
+ typedef std::set<SCTAB>::const_iterator const_iterator;
+ iterator begin();
+ iterator end();
+ const_iterator begin() const;
+ const_iterator end() const;
};
diff --git a/sc/source/core/data/markdata.cxx b/sc/source/core/data/markdata.cxx
index 375fd41..8ebe3c1 100644
--- a/sc/source/core/data/markdata.cxx
+++ b/sc/source/core/data/markdata.cxx
@@ -617,6 +617,27 @@ void ScMarkData::DeleteTab( SCTAB nTab )
maTabMarked.swap(tabMarked);
}
+//iterators
+ScMarkData::iterator ScMarkData::begin()
+{
+ return maTabMarked.begin();
+}
+
+ScMarkData::iterator ScMarkData::end()
+{
+ return maTabMarked.end();
+}
+
+ScMarkData::const_iterator ScMarkData::begin() const
+{
+ return maTabMarked.begin();
+}
+
+ScMarkData::const_iterator ScMarkData::end() const
+{
+ return maTabMarked.end();
+}
+
More information about the Libreoffice-commits
mailing list