summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorMarkus Mohrhard <markus.mohrhard@googlemail.com>2011-05-16 22:53:26 +0200
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2011-05-16 22:53:26 +0200
commit18767cccea159d405710fd068b1bc67d90b287d9 (patch)
tree7e8d572700cd270cd725c53a6172329d76152743 /sc
parentca8a159af4fb1e15a4c0f78d4d6577d1a6db025d (diff)
make some more methods work correctly with unlimited number of sheets
Diffstat (limited to 'sc')
-rw-r--r--sc/inc/markdata.hxx8
-rw-r--r--sc/source/core/data/documen2.cxx111
-rw-r--r--sc/source/core/data/document.cxx639
-rw-r--r--sc/source/core/data/markdata.cxx76
4 files changed, 433 insertions, 401 deletions
diff --git a/sc/inc/markdata.hxx b/sc/inc/markdata.hxx
index 51b67d7cb560..4f9c51f6cc3f 100644
--- a/sc/inc/markdata.hxx
+++ b/sc/inc/markdata.hxx
@@ -33,6 +33,8 @@
#include <tools/solar.h>
#include "scdllapi.h"
+#include <set>
+
class ScMarkArray;
class ScRangeList;
@@ -47,7 +49,7 @@ private:
ScRange aMarkRange; // area
ScRange aMultiRange; // maximum area altogether
ScMarkArray* pMultiSel; // multi selection
- sal_Bool bTabMarked[MAXTABCOUNT];// table marked
+ ::std::set<SCTAB> maTabMarked;
sal_Bool bMarked; // rectangle marked
sal_Bool bMultiMarked;
@@ -77,8 +79,8 @@ public:
void SetAreaTab( SCTAB nTab );
- void SelectTable( SCTAB nTab, sal_Bool bNew ) { bTabMarked[nTab] = bNew; }
- sal_Bool GetTableSelect( SCTAB nTab ) const { return bTabMarked[nTab]; }
+ void SelectTable( SCTAB nTab, bool bNew );
+ bool GetTableSelect( SCTAB nTab ) const;
void SelectOneTable( SCTAB nTab );
SCTAB GetSelectCount() const;
diff --git a/sc/source/core/data/documen2.cxx b/sc/source/core/data/documen2.cxx
index f3ca9796e5d1..194a7ef83d1a 100644
--- a/sc/source/core/data/documen2.cxx
+++ b/sc/source/core/data/documen2.cxx
@@ -557,13 +557,25 @@ void ScDocument::ResetClip( ScDocument* pSourceDoc, const ScMarkData* pMarks )//
{
InitClipPtrs(pSourceDoc);
- for (ScTableIterator it = pTab.begin(); it != pTab.end(); ++it)
- if (pSourceDoc->pTab[i] )//TODO:FIXME
+ for (SCTAB i = 0; i < static_cast<SCTAB>(pSourceDoc->pTab.size()); i++)
+ if (pSourceDoc->pTab[i])
if (!pMarks || pMarks->GetTableSelect(i))
{
String aString;
pSourceDoc->pTab[i]->GetName(aString);
- pTab[i] = new ScTable(this, i, aString);
+ if ( i < static_cast<SCTAB>(pTab.size()) )
+ {
+ pTab[i] = new ScTable(this, i, aString);
+
+ }
+ else
+ {
+ while( i > static_cast<SCTAB>(pTab.size()) )
+ {
+ pTab.push_back( NULL );
+ }
+ pTab.push_back(new ScTable(this, i, aString));
+ }
pTab[i]->SetLayoutRTL( pSourceDoc->pTab[i]->IsLayoutRTL() );
nMaxTableNumber = i+1;
}
@@ -579,10 +591,19 @@ void ScDocument::ResetClip( ScDocument* pSourceDoc, SCTAB nTab )
if (bIsClip)
{
InitClipPtrs(pSourceDoc);
-
- pTab[nTab] = new ScTable(this, nTab,
- String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("baeh")));
- if (pSourceDoc->pTab[nTab])
+ if (nTab >= static_cast<SCTAB>(pTab.size()))
+ {
+ while( nTab > pTab.size() - 1 )
+ {
+ pTab.push_back( NULL );
+ }
+ pTab.push_back(new ScTable(this, nTab,
+ String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("baeh"))));
+ }
+ else
+ pTab[nTab] = new ScTable(this, nTab,
+ String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("baeh")));
+ if (nTab < static_cast<SCTAB>(pSourceDoc->pTab.size()) && pSourceDoc->pTab[nTab])
pTab[nTab]->SetLayoutRTL( pSourceDoc->pTab[nTab]->IsLayoutRTL() );
nMaxTableNumber = nTab+1;
}
@@ -605,16 +626,28 @@ void ScDocument::PutCell( SCCOL nCol, SCROW nRow, SCTAB nTab,
{
if (VALIDTAB(nTab))
{
- if ( bForceTab && !pTab[nTab] )
+ if ( bForceTab && ( nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab] ) )
{
sal_Bool bExtras = !bIsUndo; // Spaltenbreiten, Zeilenhoehen, Flags
-
- pTab[nTab] = new ScTable(this, nTab,
- String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("temp")),
- bExtras, bExtras);
+ if ( nTab >= static_cast<SCTAB>(pTab.size()) )
+ {
+ while( nTab > pTab.size() )
+ {
+ pTab.push_back( NULL );
+ }
+ pTab.push_back(new ScTable(this, nTab,
+ String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("temp")),
+ bExtras, bExtras));
+ }
+ else
+ {
+ pTab.at(nTab) = new ScTable(this, nTab,
+ String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("temp")),
+ bExtras, bExtras);
+ }
}
- if (pTab[nTab])
+ if ( nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
pTab[nTab]->PutCell( nCol, nRow, nFormatIndex, pCell );
}
}
@@ -623,7 +656,7 @@ void ScDocument::PutCell( SCCOL nCol, SCROW nRow, SCTAB nTab,
sal_Bool ScDocument::GetPrintArea( SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow,
sal_Bool bNotes ) const
{
- if (ValidTab(nTab) && pTab[nTab])
+ if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
{
sal_Bool bAny = pTab[nTab]->GetPrintArea( rEndCol, rEndRow, bNotes );
if (pDrawLayer)
@@ -647,7 +680,7 @@ sal_Bool ScDocument::GetPrintArea( SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow,
sal_Bool ScDocument::GetPrintAreaHor( SCTAB nTab, SCROW nStartRow, SCROW nEndRow,
SCCOL& rEndCol, sal_Bool bNotes ) const
{
- if (ValidTab(nTab) && pTab[nTab])
+ if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
{
sal_Bool bAny = pTab[nTab]->GetPrintAreaHor( nStartRow, nEndRow, rEndCol, bNotes );
if (pDrawLayer)
@@ -669,7 +702,7 @@ sal_Bool ScDocument::GetPrintAreaHor( SCTAB nTab, SCROW nStartRow, SCROW nEndRow
sal_Bool ScDocument::GetPrintAreaVer( SCTAB nTab, SCCOL nStartCol, SCCOL nEndCol,
SCROW& rEndRow, sal_Bool bNotes ) const
{
- if (ValidTab(nTab) && pTab[nTab])
+ if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
{
sal_Bool bAny = pTab[nTab]->GetPrintAreaVer( nStartCol, nEndCol, rEndRow, bNotes );
if (pDrawLayer)
@@ -690,7 +723,7 @@ sal_Bool ScDocument::GetPrintAreaVer( SCTAB nTab, SCCOL nStartCol, SCCOL nEndCol
sal_Bool ScDocument::GetDataStart( SCTAB nTab, SCCOL& rStartCol, SCROW& rStartRow ) const
{
- if (ValidTab(nTab) && pTab[nTab])
+ if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
{
sal_Bool bAny = pTab[nTab]->GetDataStart( rStartCol, rStartRow );
if (pDrawLayer)
@@ -719,7 +752,7 @@ sal_Bool ScDocument::MoveTab( SCTAB nOldPos, SCTAB nNewPos )
{
if (pTab[nOldPos])
{
- SCTAB nTabCount = GetTableCount();
+ SCTAB nTabCount = pTab.size();
if (nTabCount > 1)
{
sal_Bool bOldAutoCalc = GetAutoCalc();
@@ -763,15 +796,15 @@ sal_Bool ScDocument::MoveTab( SCTAB nOldPos, SCTAB nNewPos )
for (i = nTabCount - 1; i > nNewPos; i--)
pTab[i] = pTab[i - 1];
pTab[nNewPos] = pSaveTab;
- for (i = 0; i <= MAXTAB; i++)
+ for (i = 0; i < pTab.size(); i++)
if (pTab[i])
pTab[i]->UpdateMoveTab( nOldPos, nNewPos, i, *pProgress );
delete pProgress; // freimachen fuer evtl. andere
- for (i = 0; i <= MAXTAB; i++)
+ for (i = 0; i < pTab.size(); i++)
if (pTab[i])
pTab[i]->UpdateCompile();
SetNoListening( false );
- for (i = 0; i <= MAXTAB; i++)
+ for (i = 0; i < pTab.size(); i++)
if (pTab[i])
pTab[i]->StartAllListeners();
// sheet names of references may not be valid until sheet is moved
@@ -791,7 +824,7 @@ sal_Bool ScDocument::MoveTab( SCTAB nOldPos, SCTAB nNewPos )
sal_Bool ScDocument::CopyTab( SCTAB nOldPos, SCTAB nNewPos, const ScMarkData* pOnlyMarked )
{
- if (SC_TAB_APPEND == nNewPos ) nNewPos = nMaxTableNumber;
+ if (SC_TAB_APPEND == nNewPos ) nNewPos = pTab.size();
String aName;
GetName(nOldPos, aName);
@@ -805,22 +838,21 @@ sal_Bool ScDocument::CopyTab( SCTAB nOldPos, SCTAB nNewPos, const ScMarkData* pO
sal_Bool bValid;
if (bPrefix)
- bValid = ( ValidNewTabName(aName) && (nMaxTableNumber <= MAXTAB) );
+ bValid = ( ValidNewTabName(aName) );
else
- bValid = ( !GetTable( aName, nDummy ) && (nMaxTableNumber <= MAXTAB) );
+ bValid = ( !GetTable( aName, nDummy ) );
sal_Bool bOldAutoCalc = GetAutoCalc();
SetAutoCalc( false ); // Mehrfachberechnungen vermeiden
if (bValid)
{
- if (nNewPos == nMaxTableNumber)
+ if (nNewPos == pTab.size())
{
- pTab[nMaxTableNumber] = new ScTable(this, nMaxTableNumber, aName);
- ++nMaxTableNumber;
+ pTab.push_back( new ScTable(this, nMaxTableNumber, aName) );
}
else
{
- if (VALIDTAB(nNewPos) && (nNewPos < nMaxTableNumber))
+ if (VALIDTAB(nNewPos) && (nNewPos < pTab.size()))
{
SetNoListening( sal_True );
@@ -841,23 +873,22 @@ sal_Bool ScDocument::CopyTab( SCTAB nOldPos, SCTAB nNewPos, const ScMarkData* pO
pUnoBroadcaster->Broadcast( ScUpdateRefHint( URM_INSDEL, aRange, 0,0,1 ) );
SCTAB i;
- for (i = 0; i <= MAXTAB; i++)
- if (pTab[i] && i != nOldPos)
- pTab[i]->UpdateInsertTab(nNewPos);
- for (i = nMaxTableNumber; i > nNewPos; i--)
+ for (ScTableIterator it = pTab.begin(); it != pTab.end(); ++it)
+ if (*it && it != (pTab.begin() + nOldPos))
+ (*it)->UpdateInsertTab(nNewPos);
+ for (i = pTab.size(); i > nNewPos; i--)
pTab[i] = pTab[i - 1];
if (nNewPos <= nOldPos)
nOldPos++;
pTab[nNewPos] = new ScTable(this, nNewPos, aName);
- ++nMaxTableNumber;
bValid = sal_True;
- for (i = 0; i <= MAXTAB; i++)
- if (pTab[i] && i != nOldPos && i != nNewPos)
- pTab[i]->UpdateCompile();
+ for (ScTableIterator it = pTab.begin(); it != pTab.end(); ++it)
+ if (*it && it != pTab.begin()+nOldPos && it != pTab.begin() + nNewPos)
+ (*it)->UpdateCompile();
SetNoListening( false );
- for (i = 0; i <= MAXTAB; i++)
- if (pTab[i] && i != nOldPos && i != nNewPos)
- pTab[i]->StartAllListeners();
+ for (ScTableIterator it = pTab.begin(); it != pTab.end(); ++it)
+ if (*it && it != pTab.begin()+nOldPos && it != pTab.begin()+nNewPos)
+ (*it)->StartAllListeners();
// update conditional formats after table is inserted
if ( pCondFormList )
@@ -927,7 +958,7 @@ sal_uLong ScDocument::TransferTab( ScDocument* pSrcDoc, SCTAB nSrcPos,
}
else // bestehende Tabelle ersetzen
{
- if (VALIDTAB(nDestPos) && pTab[nDestPos])
+ if (VALIDTAB(nDestPos) && nDestPos < pTab.size() && pTab[nDestPos])
{
pTab[nDestPos]->DeleteArea( 0,0, MAXCOL,MAXROW, IDF_ALL );
}
diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx
index 80e79289f0e9..f7db286e18ef 100644
--- a/sc/source/core/data/document.cxx
+++ b/sc/source/core/data/document.cxx
@@ -138,23 +138,30 @@ typedef std::set<ScDefaultAttr, ScLessDefaultAttr> ScDefaultAttrSet;
void ScDocument::MakeTable( SCTAB nTab,bool _bNeedsNameCheck )
{
- if ( ValidTab(nTab) && !pTab[nTab] )
+ if ( ValidTab(nTab) && ( nTab < static_cast<SCTAB>(pTab.size()) ||!pTab[nTab]) )
{
String aString = ScGlobal::GetRscString(STR_TABLE_DEF); //"Table"
aString += String::CreateFromInt32(nTab+1);
if ( _bNeedsNameCheck )
CreateValidTabName( aString ); // no doubles
-
- pTab[nTab] = new ScTable(this, nTab, aString);
+ if (nTab < static_cast<SCTAB>(pTab.size()))
+ {
+ pTab[nTab] = new ScTable(this, nTab, aString);
+ }
+ else
+ {
+ while(nTab > static_cast<SCTAB>(pTab.size()))
+ pTab.push_back(NULL);
+ pTab.push_back( new ScTable(this, nTab, aString) );
+ }
pTab[nTab]->SetLoadingMedium(bLoadingMedium);
- ++nMaxTableNumber;
}
}
sal_Bool ScDocument::HasTable( SCTAB nTab ) const
{
- if (VALIDTAB(nTab))
+ if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()))
if (pTab[nTab])
return sal_True;
@@ -164,7 +171,7 @@ sal_Bool ScDocument::HasTable( SCTAB nTab ) const
sal_Bool ScDocument::GetName( SCTAB nTab, String& rName ) const
{
- if (VALIDTAB(nTab))
+ if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()))
if (pTab[nTab])
{
pTab[nTab]->GetName( rName );
@@ -176,7 +183,7 @@ sal_Bool ScDocument::GetName( SCTAB nTab, String& rName ) const
sal_Bool ScDocument::SetCodeName( SCTAB nTab, const String& rName )
{
- if (VALIDTAB(nTab))
+ if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()))
{
if (pTab[nTab])
{
@@ -190,7 +197,7 @@ sal_Bool ScDocument::SetCodeName( SCTAB nTab, const String& rName )
sal_Bool ScDocument::GetCodeName( SCTAB nTab, String& rName ) const
{
- if (VALIDTAB(nTab))
+ if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()))
if (pTab[nTab])
{
pTab[nTab]->GetCodeName( rName );
@@ -205,7 +212,7 @@ sal_Bool ScDocument::GetTable( const String& rName, SCTAB& rTab ) const
String aUpperName = rName;
ScGlobal::pCharClass->toUpper(aUpperName);
- for (SCTAB i=0; i<=MAXTAB; i++)
+ for (SCTAB i=0; i< static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i])
{
if ( pTab[i]->GetUpperName() == aUpperName )
@@ -220,12 +227,15 @@ sal_Bool ScDocument::GetTable( const String& rName, SCTAB& rTab ) const
ScDBData* ScDocument::GetAnonymousDBData(SCTAB nTab)
{
- return pTab[nTab]->GetAnonymousDBData();
+ if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()))
+ return pTab[nTab]->GetAnonymousDBData();
+ return NULL;
}
void ScDocument::SetAnonymousDBData(SCTAB nTab, ScDBData* pDBData)
{
- pTab[nTab]->SetAnonymousDBData(pDBData);
+ if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()))
+ pTab[nTab]->SetAnonymousDBData(pDBData);
}
@@ -272,7 +282,7 @@ bool ScDocument::ValidTabName( const String& rName )
sal_Bool ScDocument::ValidNewTabName( const String& rName ) const
{
sal_Bool bValid = ValidTabName(rName);
- for (SCTAB i=0; (i<=MAXTAB) && bValid; i++)
+ for (SCTAB i=0; (i<static_cast<SCTAB>(pTab.size())) && bValid; i++)
if (pTab[i])
{
String aOldName;
@@ -297,8 +307,7 @@ void ScDocument::CreateValidTabName(String& rName) const
OSL_ENSURE(bPrefix, "Invalid Table Name");
SCTAB nDummy;
- SCTAB nLoops = 0; // "for safety messures"
- for ( SCTAB i = nMaxTableNumber+1; !bOk && nLoops <= MAXTAB; i++ )
+ for ( SCTAB i = pTab.size()+1; !bOk ; i++ )
{
rName = aStrTable;
rName += String::CreateFromInt32(i);
@@ -306,7 +315,6 @@ void ScDocument::CreateValidTabName(String& rName) const
bOk = ValidNewTabName( rName );
else
bOk = !GetTable( rName, nDummy );
- ++nLoops;
}
OSL_ENSURE(bOk, "No Valid Table name found.");
@@ -338,17 +346,16 @@ void ScDocument::CreateValidTabName(String& rName) const
sal_Bool ScDocument::InsertTab( SCTAB nPos, const String& rName,
sal_Bool bExternalDocument )
{
- SCTAB nTabCount = GetTableCount();
+ SCTAB nTabCount = static_cast<SCTAB>(pTab.size());
sal_Bool bValid = ValidTab(nTabCount);
if ( !bExternalDocument ) // else test rName == "'Doc'!Tab" first
bValid = (bValid && ValidNewTabName(rName));
if (bValid)
{
- if (nPos == SC_TAB_APPEND || nPos == nTabCount)
+ if (nPos == SC_TAB_APPEND || nPos >= nTabCount)
{
- pTab[nTabCount] = new ScTable(this, nTabCount, rName);
+ pTab.push_back( new ScTable(this, nTabCount, rName) );
pTab[nTabCount]->SetCodeName( rName );
- ++nMaxTableNumber;
if ( bExternalDocument )
pTab[nTabCount]->SetVisible( false );
}
@@ -373,7 +380,7 @@ sal_Bool ScDocument::InsertTab( SCTAB nPos, const String& rName,
pUnoBroadcaster->Broadcast( ScUpdateRefHint( URM_INSDEL, aRange, 0,0,1 ) );
SCTAB i;
- for (i = 0; i <= MAXTAB; i++)
+ for (i = 0; i < static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i])
pTab[i]->UpdateInsertTab(nPos);
@@ -384,16 +391,15 @@ sal_Bool ScDocument::InsertTab( SCTAB nPos, const String& rName,
pTab[nPos] = new ScTable(this, nPos, rName);
pTab[nPos]->SetCodeName( rName );
- ++nMaxTableNumber;
// UpdateBroadcastAreas must be called between UpdateInsertTab,
// which ends listening, and StartAllListeners, to not modify
// areas that are to be inserted by starting listeners.
UpdateBroadcastAreas( URM_INSDEL, aRange, 0,0,1);
- for (i = 0; i <= MAXTAB; i++)
+ for (i = 0; i < static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i])
pTab[i]->UpdateCompile();
- for (i = 0; i <= MAXTAB; i++)
+ for (i = 0; i < static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i])
pTab[i]->StartAllListeners();
@@ -420,11 +426,11 @@ sal_Bool ScDocument::InsertTab( SCTAB nPos, const String& rName,
sal_Bool ScDocument::DeleteTab( SCTAB nTab, ScDocument* pRefUndoDoc )
{
sal_Bool bValid = false;
- if (VALIDTAB(nTab))
+ if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()))
{
if (pTab[nTab])
{
- SCTAB nTabCount = GetTableCount();
+ SCTAB nTabCount = static_cast<SCTAB>(pTab.size());
if (nTabCount > 1)
{
sal_Bool bOldAutoCalc = GetAutoCalc();
@@ -446,7 +452,7 @@ sal_Bool ScDocument::DeleteTab( SCTAB nTab, ScDocument* pRefUndoDoc )
// normal reference update
- aRange.aEnd.SetTab( MAXTAB );
+ aRange.aEnd.SetTab( static_cast<SCTAB>(pTab.size()) );
xColNameRanges->UpdateReference( URM_INSDEL, this, aRange, 0,0,-1 );
xRowNameRanges->UpdateReference( URM_INSDEL, this, aRange, 0,0,-1 );
if (pRangeName)
@@ -467,28 +473,23 @@ sal_Bool ScDocument::DeleteTab( SCTAB nTab, ScDocument* pRefUndoDoc )
pUnoBroadcaster->Broadcast( ScUpdateRefHint( URM_INSDEL, aRange, 0,0,-1 ) );
SCTAB i;
- for (i=0; i<=MAXTAB; i++)
+ for (i=0; i< static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i])
pTab[i]->UpdateDeleteTab(nTab,false,
pRefUndoDoc ? pRefUndoDoc->pTab[i] : 0);
- delete pTab[nTab];
- for (i=nTab + 1; i < nTabCount; i++)
- pTab[i - 1] = pTab[i];
-
- pTab[nTabCount - 1] = NULL;
- --nMaxTableNumber;
+ pTab.erase(pTab.begin()+ nTab);
// UpdateBroadcastAreas must be called between UpdateDeleteTab,
// which ends listening, and StartAllListeners, to not modify
// areas that are to be inserted by starting listeners.
UpdateBroadcastAreas( URM_INSDEL, aRange, 0,0,-1);
- for (i = 0; i <= MAXTAB; i++)
+ for (i = 0; i < static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i])
pTab[i]->UpdateCompile();
// Excel-Filter deletes some Tables while loading, Listeners will
// only be triggered after the loading is done.
if ( !bInsertingFromOtherDoc )
{
- for (i = 0; i <= MAXTAB; i++)
+ for (i = 0; i < static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i])
pTab[i]->StartAllListeners();
SetDirty();
@@ -517,7 +518,7 @@ sal_Bool ScDocument::RenameTab( SCTAB nTab, const String& rName, sal_Bool /* bUp
bValid = true; // composed name
else
bValid = ValidTabName(rName);
- for (i=0; (i<=MAXTAB) && bValid; i++)
+ for (i=0; (i< static_cast<SCTAB>(pTab.size())) && bValid; i++)
if (pTab[i] && (i != nTab))
{
String aOldName;
@@ -534,7 +535,7 @@ sal_Bool ScDocument::RenameTab( SCTAB nTab, const String& rName, sal_Bool /* bUp
// If formulas refer to the renamed sheet, the TokenArray remains valid,
// but the XML stream must be re-generated.
- for (i=0; i<=MAXTAB; ++i)
+ for (i=0; i< static_cast<SCTAB>(pTab.size()); ++i)
if (pTab[i] && pTab[i]->IsStreamValid())
pTab[i]->SetStreamValid( false );
}
@@ -545,7 +546,7 @@ sal_Bool ScDocument::RenameTab( SCTAB nTab, const String& rName, sal_Bool /* bUp
void ScDocument::SetVisible( SCTAB nTab, sal_Bool bVisible )
{
- if (VALIDTAB(nTab))
+ if (VALIDTAB(nTab) && nTab < static_cast<SCTAB> (pTab.size()))
if (pTab[nTab])
pTab[nTab]->SetVisible(bVisible);
}
@@ -553,7 +554,7 @@ void ScDocument::SetVisible( SCTAB nTab, sal_Bool bVisible )
sal_Bool ScDocument::IsVisible( SCTAB nTab ) const
{
- if (VALIDTAB(nTab))
+ if (VALIDTAB(nTab) && nTab < static_cast<SCTAB> (pTab.size()))
if (pTab[nTab])
return pTab[nTab]->IsVisible();
@@ -563,7 +564,7 @@ sal_Bool ScDocument::IsVisible( SCTAB nTab ) const
sal_Bool ScDocument::IsStreamValid( SCTAB nTab ) const
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB> (pTab.size()) && pTab[nTab] )
return pTab[nTab]->IsStreamValid();
return false;
@@ -572,7 +573,7 @@ sal_Bool ScDocument::IsStreamValid( SCTAB nTab ) const
void ScDocument::SetStreamValid( SCTAB nTab, sal_Bool bSet, sal_Bool bIgnoreLock )
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB> (pTab.size()) && pTab[nTab] )
pTab[nTab]->SetStreamValid( bSet, bIgnoreLock );
}
@@ -585,7 +586,7 @@ void ScDocument::LockStreamValid( bool bLock )
sal_Bool ScDocument::IsPendingRowHeights( SCTAB nTab ) const
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB> (pTab.size()) && pTab[nTab] )
return pTab[nTab]->IsPendingRowHeights();
return false;
@@ -594,14 +595,14 @@ sal_Bool ScDocument::IsPendingRowHeights( SCTAB nTab ) const
void ScDocument::SetPendingRowHeights( SCTAB nTab, sal_Bool bSet )
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB> (pTab.size()) && pTab[nTab] )
pTab[nTab]->SetPendingRowHeights( bSet );
}
void ScDocument::SetLayoutRTL( SCTAB nTab, sal_Bool bRTL )
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB> (pTab.size()) && pTab[nTab] )
{
if ( bImportingXML )
{
@@ -646,7 +647,7 @@ void ScDocument::SetLayoutRTL( SCTAB nTab, sal_Bool bRTL )
sal_Bool ScDocument::IsLayoutRTL( SCTAB nTab ) const
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB> (pTab.size()) && pTab[nTab] )
return pTab[nTab]->IsLayoutRTL();
return false;
@@ -673,7 +674,7 @@ sal_Bool ScDocument::IsNegativePage( SCTAB nTab ) const
sal_Bool ScDocument::GetCellArea( SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow ) const
{
- if (VALIDTAB(nTab))
+ if (VALIDTAB(nTab) && nTab < static_cast<SCTAB> (pTab.size()))
if (pTab[nTab])
return pTab[nTab]->GetCellArea( rEndCol, rEndRow );
@@ -685,7 +686,7 @@ sal_Bool ScDocument::GetCellArea( SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow ) c
sal_Bool ScDocument::GetTableArea( SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow ) const
{
- if (VALIDTAB(nTab))
+ if (VALIDTAB(nTab) && nTab < static_cast<SCTAB> (pTab.size()))
if (pTab[nTab])
return pTab[nTab]->GetTableArea( rEndCol, rEndRow );
@@ -696,7 +697,7 @@ sal_Bool ScDocument::GetTableArea( SCTAB nTab, SCCOL& rEndCol, SCROW& rEndRow )
bool ScDocument::ShrinkToDataArea(SCTAB nTab, SCCOL& rStartCol, SCROW& rStartRow, SCCOL& rEndCol, SCROW& rEndRow) const
{
- if (!ValidTab(nTab) || !pTab[nTab])
+ if (!ValidTab(nTab) || nTab >= static_cast<SCTAB> (pTab.size()) || !pTab[nTab])
return false;
SCCOL nCol1, nCol2;
@@ -728,7 +729,7 @@ bool ScDocument::ShrinkToDataArea(SCTAB nTab, SCCOL& rStartCol, SCROW& rStartRow
bool ScDocument::ShrinkToUsedDataArea( bool& o_bShrunk, SCTAB nTab, SCCOL& rStartCol,
SCROW& rStartRow, SCCOL& rEndCol, SCROW& rEndRow, bool bColumnsOnly ) const
{
- if (!ValidTab(nTab) || !pTab[nTab])
+ if (!ValidTab(nTab) || nTab >= static_cast<SCTAB> (pTab.size()) || !pTab[nTab])
{
o_bShrunk = false;
return false;
@@ -741,7 +742,7 @@ bool ScDocument::ShrinkToUsedDataArea( bool& o_bShrunk, SCTAB nTab, SCCOL& rStar
void ScDocument::GetDataArea( SCTAB nTab, SCCOL& rStartCol, SCROW& rStartRow,
SCCOL& rEndCol, SCROW& rEndRow, sal_Bool bIncludeOld, bool bOnlyDown ) const
{
- if (ValidTab(nTab) && pTab[nTab])
+ if (ValidTab(nTab) && nTab < static_cast<SCTAB> (pTab.size()) && pTab[nTab])
pTab[nTab]->GetDataArea( rStartCol, rStartRow, rEndCol, rEndRow, bIncludeOld, bOnlyDown );
}
@@ -749,7 +750,7 @@ void ScDocument::GetDataArea( SCTAB nTab, SCCOL& rStartCol, SCROW& rStartRow,
void ScDocument::LimitChartArea( SCTAB nTab, SCCOL& rStartCol, SCROW& rStartRow,
SCCOL& rEndCol, SCROW& rEndRow )
{
- if (VALIDTAB(nTab))
+ if (VALIDTAB(nTab) && nTab < static_cast<SCTAB> (pTab.size()))
if (pTab[nTab])
pTab[nTab]->LimitChartArea( rStartCol, rStartRow, rEndCol, rEndRow );
}
@@ -771,7 +772,7 @@ void ScDocument::LimitChartIfAll( ScRangeListRef& rRangeList )
SCCOL nEndCol = aRange.aEnd.Col();
SCROW nEndRow = aRange.aEnd.Row();
SCTAB nTab = aRange.aStart.Tab();
- if (pTab[nTab])
+ if ( nTab < static_cast<SCTAB> (pTab.size()) && pTab[nTab])
pTab[nTab]->LimitChartArea(nStartCol, nStartRow, nEndCol, nEndRow);
aRange.aStart.SetCol( nStartCol );
aRange.aStart.SetRow( nStartRow );
@@ -789,17 +790,17 @@ void ScDocument::LimitChartIfAll( ScRangeListRef& rRangeList )
}
-void lcl_GetFirstTabRange( SCTAB& rTabRangeStart, SCTAB& rTabRangeEnd, const ScMarkData* pTabMark )
+void lcl_GetFirstTabRange( SCTAB& rTabRangeStart, SCTAB& rTabRangeEnd, const ScMarkData* pTabMark, SCTAB aMaxTab )
{
// without ScMarkData, leave start/end unchanged
if ( pTabMark )
{
- for (SCTAB nTab=0; nTab<=MAXTAB; ++nTab)
+ for (SCTAB nTab=0; nTab< aMaxTab; ++nTab)
if (pTabMark->GetTableSelect(nTab))
{
// find first range of consecutive selected sheets
rTabRangeStart = nTab;
- while ( nTab+1 <= MAXTAB && pTabMark->GetTableSelect(nTab+1) )
+ while ( nTab+1 < aMaxTab && pTabMark->GetTableSelect(nTab+1) )
++nTab;
rTabRangeEnd = nTab;
return;
@@ -807,16 +808,16 @@ void lcl_GetFirstTabRange( SCTAB& rTabRangeStart, SCTAB& rTabRangeEnd, const ScM
}
}
-bool lcl_GetNextTabRange( SCTAB& rTabRangeStart, SCTAB& rTabRangeEnd, const ScMarkData* pTabMark )
+bool lcl_GetNextTabRange( SCTAB& rTabRangeStart, SCTAB& rTabRangeEnd, const ScMarkData* pTabMark, SCTAB aMaxTab )
{
if ( pTabMark )
{
// find next range of consecutive selected sheets after rTabRangeEnd
- for (SCTAB nTab=rTabRangeEnd+1; nTab<=MAXTAB; ++nTab)
+ for (SCTAB nTab=rTabRangeEnd+1; nTab< aMaxTab; ++nTab)
if (pTabMark->GetTableSelect(nTab))
{
rTabRangeStart = nTab;
- while ( nTab+1 <= MAXTAB && pTabMark->GetTableSelect(nTab+1) )
+ while ( nTab+1 < aMaxTab && pTabMark->GetTableSelect(nTab+1) )
++nTab;
rTabRangeEnd = nTab;
return true;
@@ -840,7 +841,7 @@ sal_Bool ScDocument::CanInsertRow( const ScRange& rRange ) const
SCSIZE nSize = static_cast<SCSIZE>(nEndRow - nStartRow + 1);
sal_Bool bTest = sal_True;
- for (SCTAB i=nStartTab; i<=nEndTab && bTest; i++)
+ for (SCTAB i=nStartTab; i<=nEndTab && bTest && i < static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i])
bTest &= pTab[i]->TestInsertRow( nStartCol, nEndCol, nSize );
@@ -860,14 +861,14 @@ sal_Bool ScDocument::InsertRow( SCCOL nStartCol, SCTAB nStartTab,
if ( pTabMark )
{
nStartTab = 0;
- nEndTab = MAXTAB;
+ nEndTab = static_cast<SCTAB>(pTab.size()) -1;
}
sal_Bool bTest = true;
sal_Bool bRet = false;
sal_Bool bOldAutoCalc = GetAutoCalc();
SetAutoCalc( false ); // avoid mulitple calculations
- for ( i = nStartTab; i <= nEndTab && bTest; i++)
+ for ( i = nStartTab; i <= nEndTab && bTest && i < static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i] && (!pTabMark || pTabMark->GetTableSelect(i)))
bTest &= pTab[i]->TestInsertRow( nStartCol, nEndCol, nSize );
if (bTest)
@@ -878,31 +879,31 @@ sal_Bool ScDocument::InsertRow( SCCOL nStartCol, SCTAB nStartTab,
// handle chunks of consecutive selected sheets together
SCTAB nTabRangeStart = nStartTab;
SCTAB nTabRangeEnd = nEndTab;
- lcl_GetFirstTabRange( nTabRangeStart, nTabRangeEnd, pTabMark );
+ lcl_GetFirstTabRange( nTabRangeStart, nTabRangeEnd, pTabMark, static_cast<SCTAB>(pTab.size()) );
do
{
UpdateBroadcastAreas( URM_INSDEL, ScRange(
ScAddress( nStartCol, nStartRow, nTabRangeStart ),
ScAddress( nEndCol, MAXROW, nTabRangeEnd )), 0, static_cast<SCsROW>(nSize), 0 );
}
- while ( lcl_GetNextTabRange( nTabRangeStart, nTabRangeEnd, pTabMark ) );
+ while ( lcl_GetNextTabRange( nTabRangeStart, nTabRangeEnd, pTabMark, static_cast<SCTAB>(pTab.size()) ) );
- lcl_GetFirstTabRange( nTabRangeStart, nTabRangeEnd, pTabMark );
+ lcl_GetFirstTabRange( nTabRangeStart, nTabRangeEnd, pTabMark, static_cast<SCTAB>(pTab.size()) );
do
{
UpdateReference( URM_INSDEL, nStartCol, nStartRow, nTabRangeStart,
nEndCol, MAXROW, nTabRangeEnd,
0, static_cast<SCsROW>(nSize), 0, pRefUndoDoc, false ); // without drawing objects
}
- while ( lcl_GetNextTabRange( nTabRangeStart, nTabRangeEnd, pTabMark ) );
+ while ( lcl_GetNextTabRange( nTabRangeStart, nTabRangeEnd, pTabMark, static_cast<SCTAB>(pTab.size()) ) );
- for (i=nStartTab; i<=nEndTab; i++)
+ for (i=nStartTab; i<=nEndTab && i < static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i] && (!pTabMark || pTabMark->GetTableSelect(i)))
pTab[i]->InsertRow( nStartCol, nEndCol, nStartRow, nSize );
// UpdateRef for drawing layer must be after inserting,
// when the new row heights are known.
- for (i=nStartTab; i<=nEndTab; i++)
+ for (i=nStartTab; i<=nEndTab && static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i] && (!pTabMark || pTabMark->GetTableSelect(i)))
pTab[i]->UpdateDrawRef( URM_INSDEL,
nStartCol, nStartRow, nStartTab, nEndCol, MAXROW, nEndTab,
@@ -916,12 +917,12 @@ sal_Bool ScDocument::InsertRow( SCCOL nStartCol, SCTAB nStartTab,
}
else
{ // Listeners have been removed in UpdateReference
- for (i=0; i<=MAXTAB; i++)
+ for (i=0; i< static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i])
pTab[i]->StartNeededListeners();
// at least all cells using range names pointing relative
// to the moved range must recalculate
- for (i=0; i<=MAXTAB; i++)
+ for (i=0; i< static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i])
pTab[i]->SetRelNameDirty();
}
@@ -956,7 +957,7 @@ void ScDocument::DeleteRow( SCCOL nStartCol, SCTAB nStartTab,
if ( pTabMark )
{
nStartTab = 0;
- nEndTab = MAXTAB;
+ nEndTab = static_cast<SCTAB>(pTab.size())-1;
}
sal_Bool bOldAutoCalc = GetAutoCalc();
@@ -965,7 +966,7 @@ void ScDocument::DeleteRow( SCCOL nStartCol, SCTAB nStartTab,
// handle chunks of consecutive selected sheets together
SCTAB nTabRangeStart = nStartTab;
SCTAB nTabRangeEnd = nEndTab;
- lcl_GetFirstTabRange( nTabRangeStart, nTabRangeEnd, pTabMark );
+ lcl_GetFirstTabRange( nTabRangeStart, nTabRangeEnd, pTabMark, static_cast<SCTAB>(pTab.size()) );
do
{
if ( ValidRow(nStartRow+nSize) )
@@ -982,35 +983,35 @@ void ScDocument::DeleteRow( SCCOL nStartCol, SCTAB nStartTab,
ScAddress( nStartCol, nStartRow, nTabRangeStart ),
ScAddress( nEndCol, MAXROW, nTabRangeEnd ) ) );
}
- while ( lcl_GetNextTabRange( nTabRangeStart, nTabRangeEnd, pTabMark ) );
+ while ( lcl_GetNextTabRange( nTabRangeStart, nTabRangeEnd, pTabMark, static_cast<SCTAB>(pTab.size()) ) );
if ( ValidRow(nStartRow+nSize) )
{
- lcl_GetFirstTabRange( nTabRangeStart, nTabRangeEnd, pTabMark );
+ lcl_GetFirstTabRange( nTabRangeStart, nTabRangeEnd, pTabMark, static_cast<SCTAB>(pTab.size()) );
do
{
UpdateReference( URM_INSDEL, nStartCol, nStartRow+nSize, nTabRangeStart,
nEndCol, MAXROW, nTabRangeEnd,
0, -(static_cast<SCsROW>(nSize)), 0, pRefUndoDoc, sal_True, false );
}
- while ( lcl_GetNextTabRange( nTabRangeStart, nTabRangeEnd, pTabMark ) );
+ while ( lcl_GetNextTabRange( nTabRangeStart, nTabRangeEnd, pTabMark, static_cast<SCTAB>(pTab.size()) ) );
}
if (pUndoOutline)
*pUndoOutline = false;
- for ( i = nStartTab; i <= nEndTab; i++)
+ for ( i = nStartTab; i <= nEndTab && i < static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i] && (!pTabMark || pTabMark->GetTableSelect(i)))
pTab[i]->DeleteRow( nStartCol, nEndCol, nStartRow, nSize, pUndoOutline );
if ( ValidRow(nStartRow+nSize) )
{ // Listeners have been removed in UpdateReference
- for (i=0; i<=MAXTAB; i++)
+ for (i=0; i< static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i])
pTab[i]->StartNeededListeners();
// at least all cells using range names pointing relative to
// the moved range must recalculate
- for (i=0; i<=MAXTAB; i++)
+ for (i=0; i< static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i])
pTab[i]->SetRelNameDirty();
}
@@ -1043,7 +1044,7 @@ sal_Bool ScDocument::CanInsertCol( const ScRange& rRange ) const
SCSIZE nSize = static_cast<SCSIZE>(nEndCol - nStartCol + 1);
sal_Bool bTest = sal_True;
- for (SCTAB i=nStartTab; i<=nEndTab && bTest; i++)
+ for (SCTAB i=nStartTab; i<=nEndTab && bTest && i < static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i])
bTest &= pTab[i]->TestInsertCol( nStartRow, nEndRow, nSize );
@@ -1063,14 +1064,14 @@ sal_Bool ScDocument::InsertCol( SCROW nStartRow, SCTAB nStartTab,
if ( pTabMark )
{
nStartTab = 0;
- nEndTab = MAXTAB;
+ nEndTab = static_cast<SCTAB>(pTab.size())-1;
}
sal_Bool bTest = true;
sal_Bool bRet = false;
sal_Bool bOldAutoCalc = GetAutoCalc();
SetAutoCalc( false ); // avoid multiple calculations
- for ( i = nStartTab; i <= nEndTab && bTest; i++)
+ for ( i = nStartTab; i <= nEndTab && bTest && i < static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i] && (!pTabMark || pTabMark->GetTableSelect(i)))
bTest &= pTab[i]->TestInsertCol( nStartRow, nEndRow, nSize );
if (bTest)
@@ -1078,25 +1079,25 @@ sal_Bool ScDocument::InsertCol( SCROW nStartRow, SCTAB nStartTab,
// handle chunks of consecutive selected sheets together
SCTAB nTabRangeStart = nStartTab;
SCTAB nTabRangeEnd = nEndTab;
- lcl_GetFirstTabRange( nTabRangeStart, nTabRangeEnd, pTabMark );
+ lcl_GetFirstTabRange( nTabRangeStart, nTabRangeEnd, pTabMark, static_cast<SCTAB>(pTab.size()) );
do
{
UpdateBroadcastAreas( URM_INSDEL, ScRange(
ScAddress( nStartCol, nStartRow, nTabRangeStart ),
ScAddress( MAXCOL, nEndRow, nTabRangeEnd )), static_cast<SCsCOL>(nSize), 0, 0 );
}
- while ( lcl_GetNextTabRange( nTabRangeStart, nTabRangeEnd, pTabMark ) );
+ while ( lcl_GetNextTabRange( nTabRangeStart, nTabRangeEnd, pTabMark, static_cast<SCTAB>(pTab.size()) ) );
- lcl_GetFirstTabRange( nTabRangeStart, nTabRangeEnd, pTabMark );
+ lcl_GetFirstTabRange( nTabRangeStart, nTabRangeEnd, pTabMark, static_cast<SCTAB>(pTab.size()) );
do
{
UpdateReference( URM_INSDEL, nStartCol, nStartRow, nTabRangeStart,
MAXCOL, nEndRow, nTabRangeEnd,
static_cast<SCsCOL>(nSize), 0, 0, pRefUndoDoc, sal_True, false );
}
- while ( lcl_GetNextTabRange( nTabRangeStart, nTabRangeEnd, pTabMark ) );
+ while ( lcl_GetNextTabRange( nTabRangeStart, nTabRangeEnd, pTabMark, static_cast<SCTAB>(pTab.size()) ) );
- for (i=nStartTab; i<=nEndTab; i++)
+ for (i=nStartTab; i<=nEndTab && i < static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i] && (!pTabMark || pTabMark->GetTableSelect(i)))
pTab[i]->InsertCol( nStartCol, nStartRow, nEndRow, nSize );
@@ -1108,12 +1109,12 @@ sal_Bool ScDocument::InsertCol( SCROW nStartRow, SCTAB nStartTab,
}
else
{ // Listeners have been removed in UpdateReference
- for (i=0; i<=MAXTAB; i++)
+ for (i=0; i< static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i])
pTab[i]->StartNeededListeners();
// at least all cells using range names pointing relative
// to the moved range must recalculate
- for (i=0; i<=MAXTAB; i++)
+ for (i=0; i< static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i])
pTab[i]->SetRelNameDirty();
}
@@ -1146,7 +1147,7 @@ void ScDocument::DeleteCol(SCROW nStartRow, SCTAB nStartTab, SCROW nEndRow, SCTA
if ( pTabMark )
{
nStartTab = 0;
- nEndTab = MAXTAB;
+ nEndTab = static_cast<SCTAB>(pTab.size())-1;
}
sal_Bool bOldAutoCalc = GetAutoCalc();
@@ -1155,7 +1156,7 @@ void ScDocument::DeleteCol(SCROW nStartRow, SCTAB nStartTab, SCROW nEndRow, SCTA
// handle chunks of consecutive selected sheets together
SCTAB nTabRangeStart = nStartTab;
SCTAB nTabRangeEnd = nEndTab;
- lcl_GetFirstTabRange( nTabRangeStart, nTabRangeEnd, pTabMark );
+ lcl_GetFirstTabRange( nTabRangeStart, nTabRangeEnd, pTabMark, static_cast<SCTAB>(pTab.size()) );
do
{
if ( ValidCol(sal::static_int_cast<SCCOL>(nStartCol+nSize)) )
@@ -1172,35 +1173,35 @@ void ScDocument::DeleteCol(SCROW nStartRow, SCTAB nStartTab, SCROW nEndRow, SCTA
ScAddress( nStartCol, nStartRow, nTabRangeStart ),
ScAddress( MAXCOL, nEndRow, nTabRangeEnd ) ) );
}
- while ( lcl_GetNextTabRange( nTabRangeStart, nTabRangeEnd, pTabMark ) );
+ while ( lcl_GetNextTabRange( nTabRangeStart, nTabRangeEnd, pTabMark, static_cast<SCTAB>(pTab.size()) ) );
if ( ValidCol(sal::static_int_cast<SCCOL>(nStartCol+nSize)) )
{
- lcl_GetFirstTabRange( nTabRangeStart, nTabRangeEnd, pTabMark );
+ lcl_GetFirstTabRange( nTabRangeStart, nTabRangeEnd, pTabMark, static_cast<SCTAB>(pTab.size()) );
do
{
UpdateReference( URM_INSDEL, sal::static_int_cast<SCCOL>(nStartCol+nSize), nStartRow, nTabRangeStart,
MAXCOL, nEndRow, nTabRangeEnd,
-static_cast<SCsCOL>(nSize), 0, 0, pRefUndoDoc, sal_True, false );
}
- while ( lcl_GetNextTabRange( nTabRangeStart, nTabRangeEnd, pTabMark ) );
+ while ( lcl_GetNextTabRange( nTabRangeStart, nTabRangeEnd, pTabMark, static_cast<SCTAB>(pTab.size()) ) );
}
if (pUndoOutline)
*pUndoOutline = false;
- for ( i = nStartTab; i <= nEndTab; i++)
+ for ( i = nStartTab; i <= nEndTab && i < static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i] && (!pTabMark || pTabMark->GetTableSelect(i)))
pTab[i]->DeleteCol( nStartCol, nStartRow, nEndRow, nSize, pUndoOutline );
if ( ValidCol(sal::static_int_cast<SCCOL>(nStartCol+nSize)) )
{ // Listeners have been removed in UpdateReference
- for (i=0; i<=MAXTAB; i++)
+ for (i=0; i< static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i])
pTab[i]->StartNeededListeners();
// at least all cells using range names pointing relative to
// the moved range must recalculate
- for (i=0; i<=MAXTAB; i++)
+ for (i=0; i< static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i])
pTab[i]->SetRelNameDirty();
}
@@ -1368,7 +1369,7 @@ void ScDocument::DeleteArea(SCCOL nCol1, SCROW nRow1,
PutInOrder( nRow1, nRow2 );
sal_Bool bOldAutoCalc = GetAutoCalc();
SetAutoCalc( false ); // avoid multiple calculations
- for (SCTAB i = 0; i <= MAXTAB; i++)
+ for (SCTAB i = 0; i < static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i])
if ( rMark.GetTableSelect(i) || bIsUndo )
pTab[i]->DeleteArea(nCol1, nRow1, nCol2, nRow2, nDelFlag);
@@ -1382,7 +1383,7 @@ void ScDocument::DeleteAreaTab(SCCOL nCol1, SCROW nRow1,
{
PutInOrder( nCol1, nCol2 );
PutInOrder( nRow1, nRow2 );
- if ( VALIDTAB(nTab) && pTab[nTab] )
+ if ( VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
{
sal_Bool bOldAutoCalc = GetAutoCalc();
SetAutoCalc( false ); // avoid multiple calculations
@@ -1401,7 +1402,7 @@ void ScDocument::DeleteAreaTab( const ScRange& rRange, sal_uInt16 nDelFlag )
}
-void ScDocument::InitUndoSelected( ScDocument* pSrcDoc, const ScMarkData& rTabSelection,
+void ScDocument::InitUndoSelected( ScDocument* pSrcDoc, const ScMarkData& rTabSelection,//TODO:REWORK
sal_Bool bColInfo, sal_Bool bRowInfo )
{
if (bIsUndo)
@@ -1425,7 +1426,7 @@ void ScDocument::InitUndoSelected( ScDocument* pSrcDoc, const ScMarkData& rTabSe
}
-void ScDocument::InitUndo( ScDocument* pSrcDoc, SCTAB nTab1, SCTAB nTab2,
+void ScDocument::InitUndo( ScDocument* pSrcDoc, SCTAB nTab1, SCTAB nTab2,//TODO:REWORK
sal_Bool bColInfo, sal_Bool bRowInfo )
{
if (bIsUndo)
@@ -1447,7 +1448,7 @@ void ScDocument::InitUndo( ScDocument* pSrcDoc, SCTAB nTab1, SCTAB nTab2,
}
-void ScDocument::AddUndoTab( SCTAB nTab1, SCTAB nTab2, sal_Bool bColInfo, sal_Bool bRowInfo )
+void ScDocument::AddUndoTab( SCTAB nTab1, SCTAB nTab2, sal_Bool bColInfo, sal_Bool bRowInfo )//TODO:REWORK
{
if (bIsUndo)
{
@@ -1503,9 +1504,9 @@ void ScDocument::CopyToDocument(SCCOL nCol1, SCROW nRow1, SCTAB nTab1,
{
sal_Bool bOldAutoCalc = pDestDoc->GetAutoCalc();
pDestDoc->SetAutoCalc( false ); // avoid multiple calculations
- for (SCTAB i = nTab1; i <= nTab2; i++)
+ for (SCTAB i = nTab1; i <= nTab2 && i < static_cast<SCTAB>(pTab.size()); i++)
{
- if (pTab[i] && pDestDoc->pTab[i])
+ if (pTab[i] && i < static_cast<SCTAB>(pDestDoc->pTab.size()) && pDestDoc->pTab[i])
pTab[i]->CopyToTable( nCol1, nRow1, nCol2, nRow2, nFlags,
bOnlyMarked, pDestDoc->pTab[i], pMarks,
false, bColRowFlags );
@@ -1515,7 +1516,7 @@ void ScDocument::CopyToDocument(SCCOL nCol1, SCROW nRow1, SCTAB nTab1,
}
-void ScDocument::UndoToDocument(SCCOL nCol1, SCROW nRow1, SCTAB nTab1,
+void ScDocument::UndoToDocument(SCCOL nCol1, SCROW nRow1, SCTAB nTab1,//TODO:REWORK
SCCOL nCol2, SCROW nRow2, SCTAB nTab2,
sal_uInt16 nFlags, sal_Bool bOnlyMarked, ScDocument* pDestDoc,
const ScMarkData* pMarks)
@@ -1544,7 +1545,7 @@ void ScDocument::UndoToDocument(SCCOL nCol1, SCROW nRow1, SCTAB nTab1,
}
-void ScDocument::CopyToDocument(const ScRange& rRange,
+void ScDocument::CopyToDocument(const ScRange& rRange,//TODO:REWORK
sal_uInt16 nFlags, sal_Bool bOnlyMarked, ScDocument* pDestDoc,
const ScMarkData* pMarks, sal_Bool bColRowFlags)
{
@@ -1555,8 +1556,8 @@ void ScDocument::CopyToDocument(const ScRange& rRange,
pDestDoc->aDocName = aDocName;
sal_Bool bOldAutoCalc = pDestDoc->GetAutoCalc();
pDestDoc->SetAutoCalc( false ); // avoid multiple calculations
- for (SCTAB i = aNewRange.aStart.Tab(); i <= aNewRange.aEnd.Tab(); i++)
- if (pTab[i] && pDestDoc->pTab[i])
+ for (SCTAB i = aNewRange.aStart.Tab(); i <= aNewRange.aEnd.Tab() && i < static_cast<SCTAB>(pTab.size()); i++)
+ if (pTab[i] && i < static_cast<SCTAB>(pDestDoc->pTab.size()) && pDestDoc->pTab[i])
pTab[i]->CopyToTable(aNewRange.aStart.Col(), aNewRange.aStart.Row(),
aNewRange.aEnd.Col(), aNewRange.aEnd.Row(),
nFlags, bOnlyMarked, pDestDoc->pTab[i],
@@ -1579,16 +1580,16 @@ void ScDocument::UndoToDocument(const ScRange& rRange,
if (nTab1 > 0)
CopyToDocument( 0,0,0, MAXCOL,MAXROW,nTab1-1, IDF_FORMULA, false, pDestDoc, pMarks );
- for (SCTAB i = nTab1; i <= nTab2; i++)
+ for (SCTAB i = nTab1; i <= nTab2 && i < static_cast<SCTAB>(pTab.size()); i++)
{
- if (pTab[i] && pDestDoc->pTab[i])
+ if (pTab[i] && i < static_cast<SCTAB>(pDestDoc->pTab.size()) && pDestDoc->pTab[i])
pTab[i]->UndoToTable(aNewRange.aStart.Col(), aNewRange.aStart.Row(),
aNewRange.aEnd.Col(), aNewRange.aEnd.Row(),
nFlags, bOnlyMarked, pDestDoc->pTab[i], pMarks);
}
- if (nTab2 < MAXTAB)
- CopyToDocument( 0,0,nTab2+1, MAXCOL,MAXROW,MAXTAB, IDF_FORMULA, false, pDestDoc, pMarks );
+ if (nTab2 < static_cast<SCTAB>(pTab.size()))
+ CopyToDocument( 0,0,nTab2+1, MAXCOL,MAXROW,pTab.size(), IDF_FORMULA, false, pDestDoc, pMarks );
pDestDoc->SetAutoCalc( bOldAutoCalc );
}
@@ -1614,9 +1615,9 @@ void ScDocument::CopyToClip(const ScClipParam& rClipParam,
ScRange aClipRange = rClipParam.getWholeRange();
CopyRangeNamesToClip(pClipDoc, aClipRange, pMarks, bAllTabs);
- for (SCTAB i = 0; i <= MAXTAB; ++i)
+ for (SCTAB i = 0; i < static_cast<SCTAB>(pTab.size()); ++i)
{
- if (!pTab[i] || !pClipDoc->pTab[i])
+ if (!pTab[i] || i >= static_cast<SCTAB>(pClipDoc->pTab.size()) || !pClipDoc->pTab[i])
continue;
if (pMarks && !pMarks->GetTableSelect(i))
@@ -1638,7 +1639,7 @@ void ScDocument::CopyToClip(const ScClipParam& rClipParam,
}
// Copy the content of the Range into clipboard. Adding this method for VBA API: Range.Copy().
-void ScDocument::CopyToClip4VBA(const ScClipParam& rClipParam, ScDocument* pClipDoc, bool bKeepScenarioFlags, bool bIncludeObjects, bool bCloneNoteCaptions)
+void ScDocument::CopyToClip4VBA(const ScClipParam& rClipParam, ScDocument* pClipDoc, bool bKeepScenarioFlags, bool bIncludeObjects, bool bCloneNoteCaptions)//TODO:REWORK
{
if ( !bIsClip )
{
@@ -1691,8 +1692,9 @@ void ScDocument::CopyTabToClip(SCCOL nCol1, SCROW nRow1,
rClipParam.maRanges.Append(ScRange(nCol1, nRow1, 0, nCol2, nRow2, 0));
pClipDoc->ResetClip( this, nTab );
- if (pTab[nTab] && pClipDoc->pTab[nTab])
- pTab[nTab]->CopyToClip(nCol1, nRow1, nCol2, nRow2, pClipDoc->pTab[nTab], false, sal_True);
+ if (nTab < static_cast<SCTAB>(pTab.size()) && nTab < static_cast<SCTAB>(pClipDoc->pTab.size()))
+ if (pTab[nTab] && pClipDoc->pTab[nTab])
+ pTab[nTab]->CopyToClip(nCol1, nRow1, nCol2, nRow2, pClipDoc->pTab[nTab], false, true);
pClipDoc->GetClipParam().mbCutMode = false;
}
@@ -1731,7 +1733,7 @@ void ScDocument::TransposeClip( ScDocument* pTransClip, sal_uInt16 nFlags, sal_B
ScRange aClipRange = GetClipParam().getWholeRange();
if ( ValidRow(aClipRange.aEnd.Row()-aClipRange.aStart.Row()) )
{
- for (SCTAB i=0; i<=MAXTAB; i++)
+ for (SCTAB i=0; i< static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i])
{
OSL_ENSURE( pTransClip->pTab[i], "TransposeClip: Table not there" );
@@ -1799,8 +1801,8 @@ void ScDocument::CopyRangeNamesToClip(ScDocument* pClipDoc, const ScRange& rClip
return;
std::set<sal_uInt16> aUsedNames; // indexes of named ranges that are used in the copied cells
- for (SCTAB i = 0; i <= MAXTAB; ++i)
- if (pTab[i] && pClipDoc->pTab[i])
+ for (SCTAB i = 0; i < static_cast<SCTAB>(pTab.size()); ++i)
+ if (pTab[i] && i < static_cast<SCTAB>(pClipDoc->pTab.size()) && pClipDoc->pTab[i])
if ( bAllTabs || !pMarks || pMarks->GetTableSelect(i) )
pTab[i]->FindRangeNamesInUse(
rClipRange.aStart.Col(), rClipRange.aStart.Row(),
@@ -1816,12 +1818,13 @@ void ScDocument::CopyRangeNamesToClip(ScDocument* pClipDoc, const ScRange& rClip
// Indexes of named ranges that are used in the copied cells
std::set<sal_uInt16> aUsedNames;
- if ( pTab[nTab] && pClipDoc->pTab[nTab] )
- {
- pTab[nTab]->FindRangeNamesInUse(
- rClipRange.aStart.Col(), rClipRange.aStart.Row(),
- rClipRange.aEnd.Col(), rClipRange.aEnd.Row(), aUsedNames );
- }
+ if ( nTab < static_cast<SCTAB>(pTab.size()) && nTab < static_cast<SCTAB>(pClipDoc->pTab.size()) )
+ if ( pTab[nTab] && pClipDoc->pTab[nTab] )
+ {
+ pTab[nTab]->FindRangeNamesInUse(
+ rClipRange.aStart.Col(), rClipRange.aStart.Row(),
+ rClipRange.aEnd.Col(), rClipRange.aEnd.Row(), aUsedNames );
+ }
copyUsedNamesToClip(pClipDoc->GetRangeName(), pRangeName, aUsedNames);
}
@@ -1940,7 +1943,7 @@ void ScDocument::UpdateRangeNamesInFormulas(
{
do
{
- for (SCTAB k = 0; k <= MAXTAB; k++)
+ for (SCTAB k = 0; k < static_cast<SCTAB>(pTab.size()); k++)
{
if ( pTab[k] && rMark.GetTableSelect(k) )
pTab[k]->ReplaceRangeNamesInUse(nC1, nR1,
@@ -1986,7 +1989,7 @@ void ScDocument::StartListeningFromClip( SCCOL nCol1, SCROW nRow1,
{
if (nInsFlag & IDF_CONTENTS)
{
- for (SCTAB i = 0; i <= MAXTAB; i++)
+ for (SCTAB i = 0; i < static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i])
if (rMark.GetTableSelect(i))
pTab[i]->StartListeningInArea( nCol1, nRow1, nCol2, nRow2 );
@@ -2001,14 +2004,14 @@ void ScDocument::BroadcastFromClip( SCCOL nCol1, SCROW nRow1,
if (nInsFlag & IDF_CONTENTS)
{
ScBulkBroadcast aBulkBroadcast( GetBASM());
- for (SCTAB i = 0; i <= MAXTAB; i++)
+ for (SCTAB i = 0; i < static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i])
if (rMark.GetTableSelect(i))
pTab[i]->BroadcastInArea( nCol1, nRow1, nCol2, nRow2 );
}
}
-void ScDocument::CopyBlockFromClip( SCCOL nCol1, SCROW nRow1,
+void ScDocument::CopyBlockFromClip( SCCOL nCol1, SCROW nRow1,//TODO:REWORK
SCCOL nCol2, SCROW nRow2,
const ScMarkData& rMark,
SCsCOL nDx, SCsROW nDy,
@@ -2091,7 +2094,7 @@ void ScDocument::CopyBlockFromClip( SCCOL nCol1, SCROW nRow1,
}
-void ScDocument::CopyNonFilteredFromClip( SCCOL nCol1, SCROW nRow1,
+void ScDocument::CopyNonFilteredFromClip( SCCOL nCol1, SCROW nRow1,//TODO:REWORK
SCCOL nCol2, SCROW nRow2,
const ScMarkData& rMark,
SCsCOL nDx, SCsROW /* nDy */,
@@ -2172,7 +2175,7 @@ void ScDocument::CopyFromClip( const ScRange& rDestRange, const ScMarkData& rMar
SCCOL nXw = 0;
SCROW nYw = 0;
ScRange aClipRange = pClipDoc->GetClipParam().getWholeRange();
- for (SCTAB nTab = 0; nTab <= MAXTAB; nTab++) // find largest merge overlap
+ for (SCTAB nTab = 0; nTab < static_cast<SCTAB>(pClipDoc->pTab.size()); nTab++) // find largest merge overlap
if (pClipDoc->pTab[nTab]) // all sheets of the clipboard content
{
SCCOL nThisEndX = aClipRange.aEnd.Col();
@@ -2225,7 +2228,7 @@ void ScDocument::CopyFromClip( const ScRange& rDestRange, const ScMarkData& rMar
// die Draw-Seitengroesse neu berechnet werden muss
//! nur wenn ganze Zeilen/Spalten kopiert werden?
- for (SCTAB j = 0; j <= MAXTAB; j++)
+ for (SCTAB j = 0; j < static_cast<SCTAB>(pTab.size()); j++)
if (pTab[j] && rMark.GetTableSelect(j))
{
if ( j < aCBFCP.nTabStart )
@@ -2311,7 +2314,7 @@ void ScDocument::CopyFromClip( const ScRange& rDestRange, const ScMarkData& rMar
ScColumn::bDoubleAlloc = bOldDouble;
- for (SCTAB k = 0; k <= MAXTAB; k++)
+ for (SCTAB k = 0; k < static_cast<SCTAB>(pTab.size()); k++)
if (pTab[k] && rMark.GetTableSelect(k))
pTab[k]->DecRecalcLevel();
@@ -2377,7 +2380,7 @@ void ScDocument::CopyMultiRangeFromClip(
aCBFCP.nTabStart = MAXTAB;
aCBFCP.nTabEnd = 0;
- for (SCTAB j = 0; j <= MAXTAB; ++j)
+ for (SCTAB j = 0; j < static_cast<SCTAB>(pTab.size()); ++j)
{
if (pTab[j] && rMark.GetTableSelect(j))
{
@@ -2447,7 +2450,7 @@ void ScDocument::CopyMultiRangeFromClip(
nCol1 += p->aEnd.Col() - p->aStart.Col() + 1;
}
- for (SCTAB i = 0; i <= MAXTAB; i++)
+ for (SCTAB i = 0; i < static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i] && rMark.GetTableSelect(i))
pTab[i]->DecRecalcLevel();
@@ -2527,7 +2530,7 @@ void ScDocument::GetClipArea(SCCOL& nClipX, SCROW& nClipY, sal_Bool bIncludeFilt
// count non-filtered rows
// count on first used table in clipboard
SCTAB nCountTab = 0;
- while ( nCountTab < MAXTAB && !pTab[nCountTab] )
+ while ( nCountTab < static_cast<SCTAB>(pTab.size()) && !pTab[nCountTab] )
++nCountTab;
SCROW nResult = CountNonFilteredRows(nStartRow, nEndRow, nCountTab);
@@ -2562,7 +2565,7 @@ sal_Bool ScDocument::HasClipFilteredRows()
{
// count on first used table in clipboard
SCTAB nCountTab = 0;
- while ( nCountTab < MAXTAB && !pTab[nCountTab] )
+ while ( nCountTab < static_cast<SCTAB>(pTab.size()) && !pTab[nCountTab] )
++nCountTab;
ScRangeList& rClipRanges = GetClipParam().maRanges;
@@ -2580,7 +2583,7 @@ sal_Bool ScDocument::HasClipFilteredRows()
}
-void ScDocument::MixDocument( const ScRange& rRange, sal_uInt16 nFunction, sal_Bool bSkipEmpty,
+void ScDocument::MixDocument( const ScRange& rRange, sal_uInt16 nFunction, sal_Bool bSkipEmpty,//TODO:REWORK
ScDocument* pSrcDoc )
{
SCTAB nTab1 = rRange.aStart.Tab();
@@ -2603,7 +2606,7 @@ void ScDocument::FillTab( const ScRange& rSrcArea, const ScMarkData& rMark,
SCTAB nSrcTab = rSrcArea.aStart.Tab();
- if (ValidTab(nSrcTab) && pTab[nSrcTab])
+ if (ValidTab(nSrcTab) && nSrcTab < static_cast<SCTAB>(pTab.size()) && pTab[nSrcTab])
{
SCCOL nStartCol = rSrcArea.aStart.Col();
SCROW nStartRow = rSrcArea.aStart.Row();
@@ -2615,7 +2618,7 @@ void ScDocument::FillTab( const ScRange& rSrcArea, const ScMarkData& rMark,
sal_Bool bOldAutoCalc = GetAutoCalc();
SetAutoCalc( false ); // avoid multiple calculations
- SCTAB nCount = GetTableCount();
+ SCTAB nCount = static_cast<SCTAB>(pTab.size());
for (SCTAB i=0; i<nCount; i++)
if ( i!=nSrcTab && pTab[i] && rMark.GetTableSelect(i) )
{
@@ -2659,7 +2662,7 @@ void ScDocument::FillTabMarked( SCTAB nSrcTab, const ScMarkData& rMark,
if (nDelFlags & IDF_CONTENTS)
nDelFlags |= IDF_CONTENTS; // immer alle Inhalte oder keine loeschen!
- if (ValidTab(nSrcTab) && pTab[nSrcTab])
+ if (ValidTab(nSrcTab) && nSrcTab < static_cast<SCTAB>(pTab.size()) && pTab[nSrcTab])
{
ScDocument* pMixDoc = NULL;
sal_Bool bDoMix = ( bSkipEmpty || nFunction ) && ( nFlags & IDF_CONTENTS );
@@ -2674,7 +2677,7 @@ void ScDocument::FillTabMarked( SCTAB nSrcTab, const ScMarkData& rMark,
SCCOL nEndCol = aArea.aEnd.Col();
SCROW nEndRow = aArea.aEnd.Row();
- SCTAB nCount = GetTableCount();
+ SCTAB nCount = static_cast<SCTAB>(pTab.size());
for (SCTAB i=0; i<nCount; i++)
if ( i!=nSrcTab && pTab[i] && rMark.GetTableSelect(i) )
{
@@ -2710,7 +2713,7 @@ void ScDocument::FillTabMarked( SCTAB nSrcTab, const ScMarkData& rMark,
}
-void ScDocument::PutCell( SCCOL nCol, SCROW nRow, SCTAB nTab, ScBaseCell* pCell, sal_Bool bForceTab )
+void ScDocument::PutCell( SCCOL nCol, SCROW nRow, SCTAB nTab, ScBaseCell* pCell, sal_Bool bForceTab )//TODO:REWORK
{
if (VALIDTAB(nTab))
{
@@ -2730,7 +2733,7 @@ void ScDocument::PutCell( SCCOL nCol, SCROW nRow, SCTAB nTab, ScBaseCell* pCell,
}
-void ScDocument::PutCell( const ScAddress& rPos, ScBaseCell* pCell, sal_Bool bForceTab )
+void ScDocument::PutCell( const ScAddress& rPos, ScBaseCell* pCell, sal_Bool bForceTab )//TODO:REWORK
{
SCTAB nTab = rPos.Tab();
if ( bForceTab && !pTab[nTab] )
@@ -2751,7 +2754,7 @@ void ScDocument::PutCell( const ScAddress& rPos, ScBaseCell* pCell, sal_Bool bFo
sal_Bool ScDocument::SetString( SCCOL nCol, SCROW nRow, SCTAB nTab, const String& rString,
ScSetStringParam* pParam )
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
return pTab[nTab]->SetString( nCol, nRow, nTab, rString, pParam );
else
return false;
@@ -2760,7 +2763,7 @@ sal_Bool ScDocument::SetString( SCCOL nCol, SCROW nRow, SCTAB nTab, const String
void ScDocument::SetValue( SCCOL nCol, SCROW nRow, SCTAB nTab, const double& rVal )
{
- if (VALIDTAB(nTab))
+ if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()))
if (pTab[nTab])
pTab[nTab]->SetValue( nCol, nRow, rVal );
}
@@ -2768,7 +2771,7 @@ void ScDocument::SetValue( SCCOL nCol, SCROW nRow, SCTAB nTab, const double& rVa
void ScDocument::GetString( SCCOL nCol, SCROW nRow, SCTAB nTab, String& rString )
{
- if ( VALIDTAB(nTab) && pTab[nTab] )
+ if ( VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
pTab[nTab]->GetString( nCol, nRow, rString );
else
rString.Erase();
@@ -2783,7 +2786,7 @@ void ScDocument::GetString( SCCOL nCol, SCROW nRow, SCTAB nTab, rtl::OUString& r
void ScDocument::GetInputString( SCCOL nCol, SCROW nRow, SCTAB nTab, String& rString )
{
- if ( VALIDTAB(nTab) && pTab[nTab] )
+ if ( VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
pTab[nTab]->GetInputString( nCol, nRow, rString );
else
rString.Erase();
@@ -2792,7 +2795,7 @@ void ScDocument::GetInputString( SCCOL nCol, SCROW nRow, SCTAB nTab, String& rSt
void ScDocument::GetValue( SCCOL nCol, SCROW nRow, SCTAB nTab, double& rValue )
{
- if ( VALIDTAB(nTab) && pTab[nTab] )
+ if ( VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
rValue = pTab[nTab]->GetValue( nCol, nRow );
else
rValue = 0.0;
@@ -2802,7 +2805,7 @@ void ScDocument::GetValue( SCCOL nCol, SCROW nRow, SCTAB nTab, double& rValue )
double ScDocument::GetValue( const ScAddress& rPos )
{
SCTAB nTab = rPos.Tab();
- if ( pTab[nTab] )
+ if ( nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
return pTab[nTab]->GetValue( rPos );
return 0.0;
}
@@ -2811,7 +2814,7 @@ double ScDocument::GetValue( const ScAddress& rPos )
void ScDocument::GetNumberFormat( SCCOL nCol, SCROW nRow, SCTAB nTab,
sal_uInt32& rFormat ) const
{
- if (VALIDTAB(nTab))
+ if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()))
if (pTab[nTab])
{
rFormat = pTab[nTab]->GetNumberFormat( nCol, nRow );
@@ -2831,7 +2834,7 @@ sal_uInt32 ScDocument::GetNumberFormat( const ScRange& rRange ) const
sal_uInt32 nFormat = 0;
bool bFirstItem = true;
- for (SCTAB nTab = nTab1; nTab <= nTab2; ++nTab)
+ for (SCTAB nTab = nTab1; nTab <= nTab2 && nTab < static_cast<SCTAB>(pTab.size()) ; ++nTab)
for (SCCOL nCol = nCol1; nCol <= nCol2; ++nCol)
{
sal_uInt32 nThisFormat = pTab[nTab]->GetNumberFormat(nCol, nRow1, nRow2);
@@ -2860,7 +2863,7 @@ void ScDocument::GetNumberFormatInfo( short& nType, sal_uLong& nIndex,
const ScAddress& rPos, const ScBaseCell* pCell ) const
{
SCTAB nTab = rPos.Tab();
- if ( pTab[nTab] )
+ if ( nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
{
nIndex = pTab[nTab]->GetNumberFormat( rPos );
if ( (nIndex % SV_COUNTRY_LANGUAGE_OFFSET) == 0 && pCell &&
@@ -2879,7 +2882,7 @@ void ScDocument::GetNumberFormatInfo( short& nType, sal_uLong& nIndex,
void ScDocument::GetFormula( SCCOL nCol, SCROW nRow, SCTAB nTab, String& rFormula ) const
{
- if ( VALIDTAB(nTab) && pTab[nTab] )
+ if ( VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
pTab[nTab]->GetFormula( nCol, nRow, rFormula );
else
rFormula.Erase();
@@ -2889,7 +2892,7 @@ void ScDocument::GetFormula( SCCOL nCol, SCROW nRow, SCTAB nTab, String& rFormul
CellType ScDocument::GetCellType( const ScAddress& rPos ) const
{
SCTAB nTab = rPos.Tab();
- if ( pTab[nTab] )
+ if ( nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
return pTab[nTab]->GetCellType( rPos );
return CELLTYPE_NONE;
}
@@ -2898,7 +2901,7 @@ CellType ScDocument::GetCellType( const ScAddress& rPos ) const
void ScDocument::GetCellType( SCCOL nCol, SCROW nRow, SCTAB nTab,
CellType& rCellType ) const
{
- if (ValidTab(nTab) && pTab[nTab])
+ if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
rCellType = pTab[nTab]->GetCellType( nCol, nRow );
else
rCellType = CELLTYPE_NONE;
@@ -2908,7 +2911,7 @@ void ScDocument::GetCellType( SCCOL nCol, SCROW nRow, SCTAB nTab,
void ScDocument::GetCell( SCCOL nCol, SCROW nRow, SCTAB nTab,
ScBaseCell*& rpCell ) const
{
- if (ValidTab(nTab) && pTab[nTab])
+ if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
rpCell = pTab[nTab]->GetCell( nCol, nRow );
else
{
@@ -2921,7 +2924,7 @@ void ScDocument::GetCell( SCCOL nCol, SCROW nRow, SCTAB nTab,
ScBaseCell* ScDocument::GetCell( const ScAddress& rPos ) const
{
SCTAB nTab = rPos.Tab();
- if (ValidTab(nTab) && pTab[nTab])
+ if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
return pTab[nTab]->GetCell( rPos );
OSL_FAIL("GetCell ohne Tabelle");
@@ -2931,7 +2934,7 @@ ScBaseCell* ScDocument::GetCell( const ScAddress& rPos ) const
sal_Bool ScDocument::HasStringData( SCCOL nCol, SCROW nRow, SCTAB nTab ) const
{
- if ( VALIDTAB(nTab) && pTab[nTab] )
+ if ( VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
return pTab[nTab]->HasStringData( nCol, nRow );
else
return false;
@@ -2940,7 +2943,7 @@ sal_Bool ScDocument::HasStringData( SCCOL nCol, SCROW nRow, SCTAB nTab ) const
sal_Bool ScDocument::HasValueData( SCCOL nCol, SCROW nRow, SCTAB nTab ) const
{
- if ( VALIDTAB(nTab) && pTab[nTab] )
+ if ( VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
return pTab[nTab]->HasValueData( nCol, nRow );
else
return false;
@@ -2958,7 +2961,7 @@ sal_Bool ScDocument::HasStringCells( const ScRange& rRange ) const
SCROW nEndRow = rRange.aEnd.Row();
SCTAB nEndTab = rRange.aEnd.Tab();
- for ( SCTAB nTab=nStartTab; nTab<=nEndTab; nTab++ )
+ for ( SCTAB nTab=nStartTab; nTab<=nEndTab && nTab < static_cast<SCTAB>(pTab.size()); nTab++ )
if ( pTab[nTab] && pTab[nTab]->HasStringCells( nStartCol, nStartRow, nEndCol, nEndRow ) )
return sal_True;
@@ -2981,14 +2984,14 @@ sal_Bool ScDocument::HasSelectionData( SCCOL nCol, SCROW nRow, SCTAB nTab ) cons
ScPostIt* ScDocument::GetNote( const ScAddress& rPos )
{
- ScTable* pTable = ValidTab( rPos.Tab() ) ? pTab[ rPos.Tab() ] : 0;
+ ScTable* pTable = ValidTab( rPos.Tab() ) && rPos.Tab() < static_cast<SCTAB>(pTab.size()) ? pTab[ rPos.Tab() ] : 0;
return pTable ? pTable->GetNote( rPos.Col(), rPos.Row() ) : 0;
}
void ScDocument::TakeNote( const ScAddress& rPos, ScPostIt*& rpNote )
{
- if( ValidTab( rPos.Tab() ) && pTab[ rPos.Tab() ] )
+ if( ValidTab( rPos.Tab() ) && rPos.Tab() < static_cast<SCTAB>(pTab.size()) && pTab[ rPos.Tab() ] )
pTab[ rPos.Tab() ]->TakeNote( rPos.Col(), rPos.Row(), rpNote );
else
DELETEZ( rpNote );
@@ -2997,7 +3000,7 @@ void ScDocument::TakeNote( const ScAddress& rPos, ScPostIt*& rpNote )
ScPostIt* ScDocument::ReleaseNote( const ScAddress& rPos )
{
- ScTable* pTable = ValidTab( rPos.Tab() ) ? pTab[ rPos.Tab() ] : 0;
+ ScTable* pTable = ValidTab( rPos.Tab() ) && rPos.Tab() < static_cast<SCTAB>(pTab.size())? pTab[ rPos.Tab() ] : 0;
return pTable ? pTable->ReleaseNote( rPos.Col(), rPos.Row() ) : 0;
}
@@ -3016,20 +3019,20 @@ ScPostIt* ScDocument::GetOrCreateNote( const ScAddress& rPos )
void ScDocument::DeleteNote( const ScAddress& rPos )
{
- if( ValidTab( rPos.Tab() ) && pTab[ rPos.Tab() ] )
+ if( ValidTab( rPos.Tab() ) && rPos.Tab() < static_cast<SCTAB>(pTab.size()) && pTab[ rPos.Tab() ] )
pTab[ rPos.Tab() ]->DeleteNote( rPos.Col(), rPos.Row() );
}
void ScDocument::InitializeNoteCaptions( SCTAB nTab, bool bForced )
{
- if( ValidTab( nTab ) && pTab[ nTab ] )
+ if( ValidTab( nTab ) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[ nTab ] )
pTab[ nTab ]->InitializeNoteCaptions( bForced );
}
void ScDocument::InitializeAllNoteCaptions( bool bForced )
{
- for( SCTAB nTab = 0; nTab < GetTableCount(); ++nTab )
+ for( SCTAB nTab = 0; nTab < static_cast<SCTAB>(pTab.size()); ++nTab )
InitializeNoteCaptions( nTab, bForced );
}
@@ -3039,7 +3042,7 @@ void ScDocument::SetDirty()
bAutoCalc = false; // keine Mehrfachberechnung
{ // scope for bulk broadcast
ScBulkBroadcast aBulkBroadcast( GetBASM());
- for (SCTAB i=0; i<=MAXTAB; i++)
+ for (SCTAB i=0; i< static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i]) pTab[i]->SetDirty();
}
@@ -3060,7 +3063,7 @@ void ScDocument::SetDirty( const ScRange& rRange )
{ // scope for bulk broadcast
ScBulkBroadcast aBulkBroadcast( GetBASM());
SCTAB nTab2 = rRange.aEnd.Tab();
- for (SCTAB i=rRange.aStart.Tab(); i<=nTab2; i++)
+ for (SCTAB i=rRange.aStart.Tab(); i<=nTab2 && i < static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i]) pTab[i]->SetDirty( rRange );
}
SetAutoCalc( bOldAutoCalc );
@@ -3072,7 +3075,7 @@ void ScDocument::SetTableOpDirty( const ScRange& rRange )
sal_Bool bOldAutoCalc = GetAutoCalc();
bAutoCalc = false; // no multiple recalculation
SCTAB nTab2 = rRange.aEnd.Tab();
- for (SCTAB i=rRange.aStart.Tab(); i<=nTab2; i++)
+ for (SCTAB i=rRange.aStart.Tab(); i<=nTab2 && i < static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i]) pTab[i]->SetTableOpDirty( rRange );
SetAutoCalc( bOldAutoCalc );
}
@@ -3124,9 +3127,9 @@ void ScDocument::CalcAll()
sal_Bool bOldAutoCalc = GetAutoCalc();
SetAutoCalc( sal_True );
SCTAB i;
- for (i=0; i<=MAXTAB; i++)
+ for (i=0; i< static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i]) pTab[i]->SetDirtyVar();
- for (i=0; i<=MAXTAB; i++)
+ for (i=0; i< static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i]) pTab[i]->CalcAll();
ClearFormulaTree();
SetAutoCalc( bOldAutoCalc );
@@ -3138,7 +3141,7 @@ void ScDocument::CompileAll()
if ( pCondFormList )
pCondFormList->CompileAll();
- for (SCTAB i=0; i<=MAXTAB; i++)
+ for (SCTAB i=0; i< static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i]) pTab[i]->CompileAll();
SetDirty();
}
@@ -3155,7 +3158,7 @@ void ScDocument::CompileXML()
DBG_ASSERT( !pAutoNameCache, "AutoNameCache already set" );
pAutoNameCache = new ScAutoNameCache( this );
- for (SCTAB i=0; i<=MAXTAB; i++)
+ for (SCTAB i=0; i< static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i]) pTab[i]->CompileXML( aProgress );
DELETEZ( pAutoNameCache ); // valid only during CompileXML, where cell contents don't change
@@ -3178,9 +3181,9 @@ void ScDocument::CalcAfterLoad()
return; // dann wird erst beim Einfuegen in das richtige Doc berechnet
bCalcingAfterLoad = sal_True;
- for ( i = 0; i <= MAXTAB; i++)
+ for ( i = 0; i < static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i]) pTab[i]->CalcAfterLoad();
- for (i=0; i<=MAXTAB; i++)
+ for (i=0; i< static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i]) pTab[i]->SetDirtyAfterLoad();
bCalcingAfterLoad = false;
@@ -3204,7 +3207,7 @@ void ScDocument::CalcAfterLoad()
sal_uInt16 ScDocument::GetErrCode( const ScAddress& rPos ) const
{
SCTAB nTab = rPos.Tab();
- if ( pTab[nTab] )
+ if ( nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
return pTab[nTab]->GetErrCode( rPos );
return 0;
}
@@ -3214,7 +3217,7 @@ void ScDocument::ResetChanged( const ScRange& rRange )
{
SCTAB nStartTab = rRange.aStart.Tab();
SCTAB nEndTab = rRange.aEnd.Tab();
- for (SCTAB nTab=nStartTab; nTab<=nEndTab; nTab++)
+ for (SCTAB nTab=nStartTab; nTab<=nEndTab && nTab < static_cast<SCTAB>(pTab.size()); nTab++)
if (pTab[nTab])
pTab[nTab]->ResetChanged( rRange );
}
@@ -3226,46 +3229,46 @@ void ScDocument::ResetChanged( const ScRange& rRange )
void ScDocument::SetColWidth( SCCOL nCol, SCTAB nTab, sal_uInt16 nNewWidth )
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
pTab[nTab]->SetColWidth( nCol, nNewWidth );
}
void ScDocument::SetColWidthOnly( SCCOL nCol, SCTAB nTab, sal_uInt16 nNewWidth )
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
pTab[nTab]->SetColWidthOnly( nCol, nNewWidth );
}
void ScDocument::SetRowHeight( SCROW nRow, SCTAB nTab, sal_uInt16 nNewHeight )
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
pTab[nTab]->SetRowHeight( nRow, nNewHeight );
}
void ScDocument::SetRowHeightRange( SCROW nStartRow, SCROW nEndRow, SCTAB nTab, sal_uInt16 nNewHeight )
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
pTab[nTab]->SetRowHeightRange
( nStartRow, nEndRow, nNewHeight, 1.0, 1.0 );
}
void ScDocument::SetRowHeightOnly( SCROW nStartRow, SCROW nEndRow, SCTAB nTab, sal_uInt16 nNewHeight )
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
pTab[nTab]->SetRowHeightOnly( nStartRow, nEndRow, nNewHeight );
}
void ScDocument::SetManualHeight( SCROW nStartRow, SCROW nEndRow, SCTAB nTab, sal_Bool bManual )
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
pTab[nTab]->SetManualHeight( nStartRow, nEndRow, bManual );
}
sal_uInt16 ScDocument::GetColWidth( SCCOL nCol, SCTAB nTab ) const
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
return pTab[nTab]->GetColWidth( nCol );
OSL_FAIL("Falsche Tabellennummer");
return 0;
@@ -3274,7 +3277,7 @@ sal_uInt16 ScDocument::GetColWidth( SCCOL nCol, SCTAB nTab ) const
sal_uInt16 ScDocument::GetOriginalWidth( SCCOL nCol, SCTAB nTab ) const
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
return pTab[nTab]->GetOriginalWidth( nCol );
OSL_FAIL("Falsche Tabellennummer");
return 0;
@@ -3283,7 +3286,7 @@ sal_uInt16 ScDocument::GetOriginalWidth( SCCOL nCol, SCTAB nTab ) const
sal_uInt16 ScDocument::GetCommonWidth( SCCOL nEndCol, SCTAB nTab ) const
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
return pTab[nTab]->GetCommonWidth( nEndCol );
OSL_FAIL("Wrong table number");
return 0;
@@ -3292,7 +3295,7 @@ sal_uInt16 ScDocument::GetCommonWidth( SCCOL nEndCol, SCTAB nTab ) const
sal_uInt16 ScDocument::GetOriginalHeight( SCROW nRow, SCTAB nTab ) const
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
return pTab[nTab]->GetOriginalHeight( nRow );
OSL_FAIL("Wrong table number");
return 0;
@@ -3301,7 +3304,7 @@ sal_uInt16 ScDocument::GetOriginalHeight( SCROW nRow, SCTAB nTab ) const
sal_uInt16 ScDocument::GetRowHeight( SCROW nRow, SCTAB nTab, bool bHiddenAsZero ) const
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
return pTab[nTab]->GetRowHeight( nRow, NULL, NULL, bHiddenAsZero );
OSL_FAIL("Wrong sheet number");
return 0;
@@ -3310,7 +3313,7 @@ sal_uInt16 ScDocument::GetRowHeight( SCROW nRow, SCTAB nTab, bool bHiddenAsZero
sal_uInt16 ScDocument::GetRowHeight( SCROW nRow, SCTAB nTab, SCROW* pStartRow, SCROW* pEndRow, bool bHiddenAsZero ) const
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
return pTab[nTab]->GetRowHeight( nRow, pStartRow, pEndRow, bHiddenAsZero );
OSL_FAIL("Wrong sheet number");
return 0;
@@ -3326,7 +3329,7 @@ sal_uLong ScDocument::GetRowHeight( SCROW nStartRow, SCROW nEndRow, SCTAB nTab )
if (nStartRow > nEndRow)
return 0;
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
return pTab[nTab]->GetRowHeight( nStartRow, nEndRow);
OSL_FAIL("wrong sheet number");
@@ -3349,7 +3352,7 @@ sal_uLong ScDocument::GetScaledRowHeight( SCROW nStartRow, SCROW nEndRow,
if (nStartRow > nEndRow)
return 0;
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
return pTab[nTab]->GetScaledRowHeight( nStartRow, nEndRow, fScale);
OSL_FAIL("wrong sheet number");
@@ -3358,7 +3361,7 @@ sal_uLong ScDocument::GetScaledRowHeight( SCROW nStartRow, SCROW nEndRow,
SCROW ScDocument::GetHiddenRowCount( SCROW nRow, SCTAB nTab ) const
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
return pTab[nTab]->GetHiddenRowCount( nRow );
OSL_FAIL("Falsche Tabellennummer");
return 0;
@@ -3367,7 +3370,7 @@ SCROW ScDocument::GetHiddenRowCount( SCROW nRow, SCTAB nTab ) const
sal_uLong ScDocument::GetColOffset( SCCOL nCol, SCTAB nTab ) const
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
return pTab[nTab]->GetColOffset( nCol );
OSL_FAIL("Falsche Tabellennummer");
return 0;
@@ -3376,7 +3379,7 @@ sal_uLong ScDocument::GetColOffset( SCCOL nCol, SCTAB nTab ) const
sal_uLong ScDocument::GetRowOffset( SCROW nRow, SCTAB nTab ) const
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
return pTab[nTab]->GetRowOffset( nRow );
OSL_FAIL("Falsche Tabellennummer");
return 0;
@@ -3389,7 +3392,7 @@ sal_uInt16 ScDocument::GetOptimalColWidth( SCCOL nCol, SCTAB nTab, OutputDevice*
sal_Bool bFormula, const ScMarkData* pMarkData,
const ScColWidthParam* pParam )
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
return pTab[nTab]->GetOptimalColWidth( nCol, pDev, nPPTX, nPPTY,
rZoomX, rZoomY, bFormula, pMarkData, pParam );
OSL_FAIL("Falsche Tabellennummer");
@@ -3403,7 +3406,7 @@ long ScDocument::GetNeededSize( SCCOL nCol, SCROW nRow, SCTAB nTab,
const Fraction& rZoomX, const Fraction& rZoomY,
sal_Bool bWidth, sal_Bool bTotalSize )
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
return pTab[nTab]->GetNeededSize
( nCol, nRow, pDev, nPPTX, nPPTY, rZoomX, rZoomY, bWidth, bTotalSize );
OSL_FAIL("Falsche Tabellennummer");
@@ -3418,7 +3421,7 @@ sal_Bool ScDocument::SetOptimalHeight( SCROW nStartRow, SCROW nEndRow, SCTAB nTa
sal_Bool bShrink )
{
//! MarkToMulti();
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
return pTab[nTab]->SetOptimalHeight( nStartRow, nEndRow, nExtra,
pDev, nPPTX, nPPTY, rZoomX, rZoomY, bShrink );
OSL_FAIL("Falsche Tabellennummer");
@@ -3432,14 +3435,14 @@ void ScDocument::UpdateAllRowHeights( OutputDevice* pDev, double nPPTX, double n
// one progress across all (selected) sheets
sal_uLong nCellCount = 0;
- for ( SCTAB nTab=0; nTab<=MAXTAB; nTab++ )
+ for ( SCTAB nTab=0; nTab< static_cast<SCTAB>(pTab.size()); nTab++ )
if ( pTab[nTab] && ( !pTabMark || pTabMark->GetTableSelect(nTab) ) )
nCellCount += pTab[nTab]->GetWeightedCount();
ScProgress aProgress( GetDocumentShell(), ScGlobal::GetRscString(STR_PROGRESS_HEIGHTING), nCellCount );
sal_uLong nProgressStart = 0;
- for ( SCTAB nTab=0; nTab<=MAXTAB; nTab++ )
+ for ( SCTAB nTab=0; nTab< static_cast<SCTAB>(pTab.size()); nTab++ )
if ( pTab[nTab] && ( !pTabMark || pTabMark->GetTableSelect(nTab) ) )
{
pTab[nTab]->SetOptimalHeightOnly( 0, MAXROW, 0,
@@ -3456,42 +3459,42 @@ void ScDocument::UpdateAllRowHeights( OutputDevice* pDev, double nPPTX, double n
void ScDocument::ShowCol(SCCOL nCol, SCTAB nTab, sal_Bool bShow)
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
pTab[nTab]->ShowCol( nCol, bShow );
}
void ScDocument::ShowRow(SCROW nRow, SCTAB nTab, sal_Bool bShow)
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
pTab[nTab]->ShowRow( nRow, bShow );
}
void ScDocument::ShowRows(SCROW nRow1, SCROW nRow2, SCTAB nTab, sal_Bool bShow)
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
pTab[nTab]->ShowRows( nRow1, nRow2, bShow );
}
void ScDocument::SetRowFlags( SCROW nRow, SCTAB nTab, sal_uInt8 nNewFlags )
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
pTab[nTab]->SetRowFlags( nRow, nNewFlags );
}
void ScDocument::SetRowFlags( SCROW nStartRow, SCROW nEndRow, SCTAB nTab, sal_uInt8 nNewFlags )
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
pTab[nTab]->SetRowFlags( nStartRow, nEndRow, nNewFlags );
}
sal_uInt8 ScDocument::GetColFlags( SCCOL nCol, SCTAB nTab ) const
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
return pTab[nTab]->GetColFlags( nCol );
OSL_FAIL("Falsche Tabellennummer");
return 0;
@@ -3499,7 +3502,7 @@ sal_uInt8 ScDocument::GetColFlags( SCCOL nCol, SCTAB nTab ) const
sal_uInt8 ScDocument::GetRowFlags( SCROW nRow, SCTAB nTab ) const
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
return pTab[nTab]->GetRowFlags( nRow );
OSL_FAIL("Falsche Tabellennummer");
return 0;
@@ -3516,7 +3519,7 @@ const ScBitMaskCompressedArray< SCROW, sal_uInt8> & ScDocument::GetRowFlagsArray
SCTAB nTab ) const
{
const ScBitMaskCompressedArray< SCROW, sal_uInt8> * pFlags;
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
pFlags = pTab[nTab]->GetRowFlagsArray();
else
{
@@ -3534,9 +3537,8 @@ const ScBitMaskCompressedArray< SCROW, sal_uInt8> & ScDocument::GetRowFlagsArray
void ScDocument::GetAllRowBreaks(set<SCROW>& rBreaks, SCTAB nTab, bool bPage, bool bManual) const
{
- if (!ValidTab(nTab) || !pTab[nTab])
+ if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab])
return;
-
pTab[nTab]->GetAllRowBreaks(rBreaks, bPage, bManual);
}
@@ -3551,7 +3553,7 @@ void ScDocument::GetAllColBreaks(set<SCCOL>& rBreaks, SCTAB nTab, bool bPage, bo
ScBreakType ScDocument::HasRowBreak(SCROW nRow, SCTAB nTab) const
{
ScBreakType nType = BREAK_NONE;
- if (!ValidTab(nTab) || !pTab[nTab] || !ValidRow(nRow))
+ if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab] || !ValidRow(nRow))
return nType;
if (pTab[nTab]->HasRowPageBreak(nRow))
@@ -3566,7 +3568,7 @@ ScBreakType ScDocument::HasRowBreak(SCROW nRow, SCTAB nTab) const
ScBreakType ScDocument::HasColBreak(SCCOL nCol, SCTAB nTab) const
{
ScBreakType nType = BREAK_NONE;
- if (!ValidTab(nTab) || !pTab[nTab] || !ValidCol(nCol))
+ if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab] || !ValidCol(nCol))
return nType;
if (pTab[nTab]->HasColPageBreak(nCol))
@@ -3580,7 +3582,7 @@ ScBreakType ScDocument::HasColBreak(SCCOL nCol, SCTAB nTab) const
void ScDocument::SetRowBreak(SCROW nRow, SCTAB nTab, bool bPage, bool bManual)
{
- if (!ValidTab(nTab) || !pTab[nTab] || !ValidRow(nRow))
+ if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab] || !ValidRow(nRow))
return;
pTab[nTab]->SetRowBreak(nRow, bPage, bManual);
@@ -3588,7 +3590,7 @@ void ScDocument::SetRowBreak(SCROW nRow, SCTAB nTab, bool bPage, bool bManual)
void ScDocument::SetColBreak(SCCOL nCol, SCTAB nTab, bool bPage, bool bManual)
{
- if (!ValidTab(nTab) || !pTab[nTab] || !ValidCol(nCol))
+ if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab] || !ValidCol(nCol))
return;
pTab[nTab]->SetColBreak(nCol, bPage, bManual);
@@ -3596,7 +3598,7 @@ void ScDocument::SetColBreak(SCCOL nCol, SCTAB nTab, bool bPage, bool bManual)
void ScDocument::RemoveRowBreak(SCROW nRow, SCTAB nTab, bool bPage, bool bManual)
{
- if (!ValidTab(nTab) || !pTab[nTab] || !ValidRow(nRow))
+ if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab] || !ValidRow(nRow))
return;
pTab[nTab]->RemoveRowBreak(nRow, bPage, bManual);
@@ -3604,7 +3606,7 @@ void ScDocument::RemoveRowBreak(SCROW nRow, SCTAB nTab, bool bPage, bool bManual
void ScDocument::RemoveColBreak(SCCOL nCol, SCTAB nTab, bool bPage, bool bManual)
{
- if (!ValidTab(nTab) || !pTab[nTab] || !ValidCol(nCol))
+ if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab] || !ValidCol(nCol))
return;
pTab[nTab]->RemoveColBreak(nCol, bPage, bManual);
@@ -3612,7 +3614,7 @@ void ScDocument::RemoveColBreak(SCCOL nCol, SCTAB nTab, bool bPage, bool bManual
Sequence<TablePageBreakData> ScDocument::GetRowBreakData(SCTAB nTab) const
{
- if (!ValidTab(nTab) || !pTab[nTab])
+ if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab])
return Sequence<TablePageBreakData>();
return pTab[nTab]->GetRowBreakData();
@@ -3620,7 +3622,7 @@ Sequence<TablePageBreakData> ScDocument::GetRowBreakData(SCTAB nTab) const
bool ScDocument::RowHidden(SCROW nRow, SCTAB nTab, SCROW* pFirstRow, SCROW* pLastRow)
{
- if (!ValidTab(nTab) || !pTab[nTab])
+ if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab])
return false;
return pTab[nTab]->RowHidden(nRow, pFirstRow, pLastRow);
@@ -3628,7 +3630,7 @@ bool ScDocument::RowHidden(SCROW nRow, SCTAB nTab, SCROW* pFirstRow, SCROW* pLas
bool ScDocument::HasHiddenRows(SCROW nStartRow, SCROW nEndRow, SCTAB nTab)
{
- if (!ValidTab(nTab) || !pTab[nTab])
+ if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab])
return false;
return pTab[nTab]->HasHiddenRows(nStartRow, nEndRow);
@@ -3636,7 +3638,7 @@ bool ScDocument::HasHiddenRows(SCROW nStartRow, SCROW nEndRow, SCTAB nTab)
bool ScDocument::ColHidden(SCCOL nCol, SCTAB nTab, SCCOL* pFirstCol, SCCOL* pLastCol)
{
- if (!ValidTab(nTab) || !pTab[nTab])
+ if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab])
{
if (pFirstCol)
*pFirstCol = nCol;
@@ -3650,7 +3652,7 @@ bool ScDocument::ColHidden(SCCOL nCol, SCTAB nTab, SCCOL* pFirstCol, SCCOL* pLas
void ScDocument::SetRowHidden(SCROW nStartRow, SCROW nEndRow, SCTAB nTab, bool bHidden)
{
- if (!ValidTab(nTab) || !pTab[nTab])
+ if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab])
return;
pTab[nTab]->SetRowHidden(nStartRow, nEndRow, bHidden);
@@ -3658,7 +3660,7 @@ void ScDocument::SetRowHidden(SCROW nStartRow, SCROW nEndRow, SCTAB nTab, bool b
void ScDocument::SetColHidden(SCCOL nStartCol, SCCOL nEndCol, SCTAB nTab, bool bHidden)
{
- if (!ValidTab(nTab) || !pTab[nTab])
+ if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab])
return;
pTab[nTab]->SetColHidden(nStartCol, nEndCol, bHidden);
@@ -3666,7 +3668,7 @@ void ScDocument::SetColHidden(SCCOL nStartCol, SCCOL nEndCol, SCTAB nTab, bool b
SCROW ScDocument::FirstVisibleRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab)
{
- if (!ValidTab(nTab) || !pTab[nTab])
+ if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab])
return ::std::numeric_limits<SCROW>::max();;
return pTab[nTab]->FirstVisibleRow(nStartRow, nEndRow);
@@ -3674,7 +3676,7 @@ SCROW ScDocument::FirstVisibleRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab)
SCROW ScDocument::LastVisibleRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab)
{
- if (!ValidTab(nTab) || !pTab[nTab])
+ if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab])
return ::std::numeric_limits<SCROW>::max();;
return pTab[nTab]->LastVisibleRow(nStartRow, nEndRow);
@@ -3682,7 +3684,7 @@ SCROW ScDocument::LastVisibleRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab)
SCROW ScDocument::CountVisibleRows(SCROW nStartRow, SCROW nEndRow, SCTAB nTab)
{
- if (!ValidTab(nTab) || !pTab[nTab])
+ if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab])
return 0;
return pTab[nTab]->CountVisibleRows(nStartRow, nEndRow);
@@ -3690,7 +3692,7 @@ SCROW ScDocument::CountVisibleRows(SCROW nStartRow, SCROW nEndRow, SCTAB nTab)
bool ScDocument::RowFiltered(SCROW nRow, SCTAB nTab, SCROW* pFirstRow, SCROW* pLastRow)
{
- if (!ValidTab(nTab) || !pTab[nTab])
+ if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab])
return false;
return pTab[nTab]->RowFiltered(nRow, pFirstRow, pLastRow);
@@ -3698,7 +3700,7 @@ bool ScDocument::RowFiltered(SCROW nRow, SCTAB nTab, SCROW* pFirstRow, SCROW* pL
bool ScDocument::HasFilteredRows(SCROW nStartRow, SCROW nEndRow, SCTAB nTab)
{
- if (!ValidTab(nTab) || !pTab[nTab])
+ if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab])
return false;
return pTab[nTab]->HasFilteredRows(nStartRow, nEndRow);
@@ -3706,7 +3708,7 @@ bool ScDocument::HasFilteredRows(SCROW nStartRow, SCROW nEndRow, SCTAB nTab)
bool ScDocument::ColFiltered(SCCOL nCol, SCTAB nTab, SCCOL* pFirstCol, SCCOL* pLastCol)
{
- if (!ValidTab(nTab) || !pTab[nTab])
+ if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab])
return false;
return pTab[nTab]->ColFiltered(nCol, pFirstCol, pLastCol);
@@ -3714,7 +3716,7 @@ bool ScDocument::ColFiltered(SCCOL nCol, SCTAB nTab, SCCOL* pFirstCol, SCCOL* pL
void ScDocument::SetRowFiltered(SCROW nStartRow, SCROW nEndRow, SCTAB nTab, bool bFiltered)
{
- if (!ValidTab(nTab) || !pTab[nTab])
+ if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab])
return;
pTab[nTab]->SetRowFiltered(nStartRow, nEndRow, bFiltered);
@@ -3723,7 +3725,7 @@ void ScDocument::SetRowFiltered(SCROW nStartRow, SCROW nEndRow, SCTAB nTab, bool
SCROW ScDocument::FirstNonFilteredRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab)
{
- if (!ValidTab(nTab) || !pTab[nTab])
+ if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab])
return ::std::numeric_limits<SCROW>::max();;
return pTab[nTab]->FirstNonFilteredRow(nStartRow, nEndRow);
@@ -3731,7 +3733,7 @@ SCROW ScDocument::FirstNonFilteredRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab
SCROW ScDocument::LastNonFilteredRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab)
{
- if (!ValidTab(nTab) || !pTab[nTab])
+ if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab])
return ::std::numeric_limits<SCROW>::max();;
return pTab[nTab]->LastNonFilteredRow(nStartRow, nEndRow);
@@ -3739,7 +3741,7 @@ SCROW ScDocument::LastNonFilteredRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab)
SCROW ScDocument::CountNonFilteredRows(SCROW nStartRow, SCROW nEndRow, SCTAB nTab)
{
- if (!ValidTab(nTab) || !pTab[nTab])
+ if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab])
return 0;
return pTab[nTab]->CountNonFilteredRows(nStartRow, nEndRow);
@@ -3747,7 +3749,7 @@ SCROW ScDocument::CountNonFilteredRows(SCROW nStartRow, SCROW nEndRow, SCTAB nTa
void ScDocument::SyncColRowFlags()
{
- for (SCTAB i = 0; i <= nMaxTableNumber; ++i)
+ for (SCTAB i = 0; i < static_cast<SCTAB>(pTab.size()); ++i)
{
if (!ValidTab(i) || !pTab[i])
continue;
@@ -3758,7 +3760,7 @@ void ScDocument::SyncColRowFlags()
SCROW ScDocument::GetLastFlaggedRow( SCTAB nTab ) const
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
return pTab[nTab]->GetLastFlaggedRow();
return 0;
}
@@ -3766,14 +3768,14 @@ SCROW ScDocument::GetLastFlaggedRow( SCTAB nTab ) const
SCCOL ScDocument::GetLastChangedCol( SCTAB nTab ) const
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
return pTab[nTab]->GetLastChangedCol();
return 0;
}
SCROW ScDocument::GetLastChangedRow( SCTAB nTab ) const
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
return pTab[nTab]->GetLastChangedRow();
return 0;
}
@@ -3781,7 +3783,7 @@ SCROW ScDocument::GetLastChangedRow( SCTAB nTab ) const
SCCOL ScDocument::GetNextDifferentChangedCol( SCTAB nTab, SCCOL nStart) const
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
{
sal_uInt8 nStartFlags = pTab[nTab]->GetColFlags(nStart);
sal_uInt16 nStartWidth = pTab[nTab]->GetOriginalWidth(nStart);
@@ -3799,7 +3801,7 @@ SCCOL ScDocument::GetNextDifferentChangedCol( SCTAB nTab, SCCOL nStart) const
SCROW ScDocument::GetNextDifferentChangedRow( SCTAB nTab, SCROW nStart, bool bCareManualSize) const
{
- if (!ValidTab(nTab) || !pTab[nTab])
+ if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab])
return 0;
const ScBitMaskCompressedArray<SCROW, sal_uInt8>* pRowFlagsArray = pTab[nTab]->GetRowFlagsArray();
@@ -3894,13 +3896,12 @@ sal_Bool ScDocument::GetColDefault( SCTAB nTab, SCCOL nCol, SCROW nLastRow, SCRO
sal_Bool ScDocument::GetRowDefault( SCTAB /* nTab */, SCROW /* nRow */, SCCOL /* nLastCol */, SCCOL& /* nDefault */ )
{
- sal_Bool bRet(false);
- return bRet;
+ return false;
}
void ScDocument::StripHidden( SCCOL& rX1, SCROW& rY1, SCCOL& rX2, SCROW& rY2, SCTAB nTab )
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
pTab[nTab]->StripHidden( rX1, rY1, rX2, rY2 );
}
@@ -3917,7 +3918,7 @@ void ScDocument::ExtendHidden( SCCOL& rX1, SCROW& rY1, SCCOL& rX2, SCROW& rY2, S
const SfxPoolItem* ScDocument::GetAttr( SCCOL nCol, SCROW nRow, SCTAB nTab, sal_uInt16 nWhich ) const
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
{
const SfxPoolItem* pTemp = pTab[nTab]->GetAttr( nCol, nRow, nWhich );
if (pTemp)
@@ -3933,7 +3934,7 @@ const SfxPoolItem* ScDocument::GetAttr( SCCOL nCol, SCROW nRow, SCTAB nTab, sal_
const ScPatternAttr* ScDocument::GetPattern( SCCOL nCol, SCROW nRow, SCTAB nTab ) const
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
return pTab[nTab]->GetPattern( nCol, nRow );
return NULL;
}
@@ -3941,7 +3942,7 @@ const ScPatternAttr* ScDocument::GetPattern( SCCOL nCol, SCROW nRow, SCTAB nTab
const ScPatternAttr* ScDocument::GetMostUsedPattern( SCCOL nCol, SCROW nStartRow, SCROW nEndRow, SCTAB nTab ) const
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
return pTab[nTab]->GetMostUsedPattern( nCol, nStartRow, nEndRow );
return NULL;
}
@@ -3949,14 +3950,14 @@ const ScPatternAttr* ScDocument::GetMostUsedPattern( SCCOL nCol, SCROW nStartRow
void ScDocument::ApplyAttr( SCCOL nCol, SCROW nRow, SCTAB nTab, const SfxPoolItem& rAttr )
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
pTab[nTab]->ApplyAttr( nCol, nRow, rAttr );
}
void ScDocument::ApplyPattern( SCCOL nCol, SCROW nRow, SCTAB nTab, const ScPatternAttr& rAttr )
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
pTab[nTab]->ApplyPattern( nCol, nRow, rAttr );
}
@@ -3967,7 +3968,7 @@ void ScDocument::ApplyPatternArea( SCCOL nStartCol, SCROW nStartRow,
const ScPatternAttr& rAttr,
ScEditDataArray* pDataArray )
{
- for (SCTAB i=0; i <= MAXTAB; i++)
+ for (SCTAB i=0; i < static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i])
if (rMark.GetTableSelect(i))
pTab[i]->ApplyPatternArea( nStartCol, nStartRow, nEndCol, nEndRow, rAttr, pDataArray );
@@ -3977,14 +3978,14 @@ void ScDocument::ApplyPatternArea( SCCOL nStartCol, SCROW nStartRow,
void ScDocument::ApplyPatternAreaTab( SCCOL nStartCol, SCROW nStartRow,
SCCOL nEndCol, SCROW nEndRow, SCTAB nTab, const ScPatternAttr& rAttr )
{
- if (VALIDTAB(nTab))
+ if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()))
if (pTab[nTab])
pTab[nTab]->ApplyPatternArea( nStartCol, nStartRow, nEndCol, nEndRow, rAttr );
}
bool ScDocument::SetAttrEntries(SCCOL nCol, SCTAB nTab, ScAttrEntry* pData, SCSIZE nSize)
{
- if (!ValidTab(nTab) || !pTab[nTab])
+ if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab])
return false;
return pTab[nTab]->SetAttrEntries(nCol, pData, nSize);
@@ -3993,7 +3994,7 @@ bool ScDocument::SetAttrEntries(SCCOL nCol, SCTAB nTab, ScAttrEntry* pData, SCSI
void ScDocument::ApplyPatternIfNumberformatIncompatible( const ScRange& rRange,
const ScMarkData& rMark, const ScPatternAttr& rPattern, short nNewType )
{
- for (SCTAB i=0; i <= MAXTAB; i++)
+ for (SCTAB i=0; i < static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i])
if (rMark.GetTableSelect(i))
pTab[i]->ApplyPatternIfNumberformatIncompatible( rRange, rPattern, nNewType );
@@ -4002,7 +4003,7 @@ void ScDocument::ApplyPatternIfNumberformatIncompatible( const ScRange& rRange,
void ScDocument::ApplyStyle( SCCOL nCol, SCROW nRow, SCTAB nTab, const ScStyleSheet& rStyle)
{
- if (VALIDTAB(nTab))
+ if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()))
if (pTab[nTab])
pTab[nTab]->ApplyStyle( nCol, nRow, rStyle );
}
@@ -4013,7 +4014,7 @@ void ScDocument::ApplyStyleArea( SCCOL nStartCol, SCROW nStartRow,
const ScMarkData& rMark,
const ScStyleSheet& rStyle)
{
- for (SCTAB i=0; i <= MAXTAB; i++)
+ for (SCTAB i=0; i < static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i])
if (rMark.GetTableSelect(i))
pTab[i]->ApplyStyleArea( nStartCol, nStartRow, nEndCol, nEndRow, rStyle );
@@ -4023,7 +4024,7 @@ void ScDocument::ApplyStyleArea( SCCOL nStartCol, SCROW nStartRow,
void ScDocument::ApplyStyleAreaTab( SCCOL nStartCol, SCROW nStartRow,
SCCOL nEndCol, SCROW nEndRow, SCTAB nTab, const ScStyleSheet& rStyle)
{
- if (VALIDTAB(nTab))
+ if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()))
if (pTab[nTab])
pTab[nTab]->ApplyStyleArea( nStartCol, nStartRow, nEndCol, nEndRow, rStyle );
}
@@ -4041,7 +4042,7 @@ void ScDocument::ApplySelectionStyle(const ScStyleSheet& rStyle, const ScMarkDat
}
else
{
- for (SCTAB i=0; i<=MAXTAB; i++)
+ for (SCTAB i=0; i< static_cast<SCTAB>(pTab.size()); i++)
if ( pTab[i] && rMark.GetTableSelect(i) )
pTab[i]->ApplySelectionStyle( rStyle, rMark );
}
@@ -4054,7 +4055,7 @@ void ScDocument::ApplySelectionLineStyle( const ScMarkData& rMark,
if ( bColorOnly && !pLine )
return;
- for (SCTAB i=0; i<=MAXTAB; i++)
+ for (SCTAB i=0; i< static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i])
if (rMark.GetTableSelect(i))
pTab[i]->ApplySelectionLineStyle( rMark, pLine, bColorOnly );
@@ -4063,7 +4064,7 @@ void ScDocument::ApplySelectionLineStyle( const ScMarkData& rMark,
const ScStyleSheet* ScDocument::GetStyle( SCCOL nCol, SCROW nRow, SCTAB nTab ) const
{
- if ( VALIDTAB(nTab) && pTab[nTab] )
+ if ( VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
return pTab[nTab]->GetStyle(nCol, nRow);
else
return NULL;
@@ -4079,7 +4080,7 @@ const ScStyleSheet* ScDocument::GetSelectionStyle( const ScMarkData& rMark ) con
const ScStyleSheet* pNewStyle;
if ( rMark.IsMultiMarked() )
- for (SCTAB i=0; i<=MAXTAB && bEqual; i++)
+ for (SCTAB i=0; i< static_cast<SCTAB>(pTab.size()) && bEqual; i++)
if (pTab[i] && rMark.GetTableSelect(i))
{
pNewStyle = pTab[i]->GetSelectionStyle( rMark, bFound );
@@ -4094,7 +4095,7 @@ const ScStyleSheet* ScDocument::GetSelectionStyle( const ScMarkData& rMark ) con
{
ScRange aRange;
rMark.GetMarkArea( aRange );
- for (SCTAB i=aRange.aStart.Tab(); i<=aRange.aEnd.Tab() && bEqual; i++)
+ for (SCTAB i=aRange.aStart.Tab(); i<=aRange.aEnd.Tab() && bEqual && i < static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i] && rMark.GetTableSelect(i))
{
pNewStyle = pTab[i]->GetAreaStyle( bFound,
@@ -4118,7 +4119,7 @@ void ScDocument::StyleSheetChanged( const SfxStyleSheetBase* pStyleSheet, sal_Bo
double nPPTX, double nPPTY,
const Fraction& rZoomX, const Fraction& rZoomY )
{
- for (SCTAB i=0; i <= MAXTAB; i++)
+ for (SCTAB i=0; i < static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i])
pTab[i]->StyleSheetChanged
( pStyleSheet, bRemoved, pDev, nPPTX, nPPTY, rZoomX, rZoomY );
@@ -4150,7 +4151,7 @@ sal_Bool ScDocument::IsStyleSheetUsed( const ScStyleSheet& rStyle, sal_Bool bGat
sal_Bool bIsUsed = false;
- for ( SCTAB i=0; i<=MAXTAB; i++ )
+ for ( SCTAB i=0; i< static_cast<SCTAB>(pTab.size()); i++ )
{
if ( pTab[i] )
{
@@ -4176,7 +4177,7 @@ sal_Bool ScDocument::IsStyleSheetUsed( const ScStyleSheet& rStyle, sal_Bool bGat
sal_Bool ScDocument::ApplyFlagsTab( SCCOL nStartCol, SCROW nStartRow,
SCCOL nEndCol, SCROW nEndRow, SCTAB nTab, sal_Int16 nFlags )
{
- if (VALIDTAB(nTab))
+ if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()))
if (pTab[nTab])
return pTab[nTab]->ApplyFlags( nStartCol, nStartRow, nEndCol, nEndRow, nFlags );
@@ -4188,7 +4189,7 @@ sal_Bool ScDocument::ApplyFlagsTab( SCCOL nStartCol, SCROW nStartRow,
sal_Bool ScDocument::RemoveFlagsTab( SCCOL nStartCol, SCROW nStartRow,
SCCOL nEndCol, SCROW nEndRow, SCTAB nTab, sal_Int16 nFlags )
{
- if (VALIDTAB(nTab))
+ if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()))
if (pTab[nTab])
return pTab[nTab]->RemoveFlags( nStartCol, nStartRow, nEndCol, nEndRow, nFlags );
@@ -4200,7 +4201,7 @@ sal_Bool ScDocument::RemoveFlagsTab( SCCOL nStartCol, SCROW nStartRow,
void ScDocument::SetPattern( SCCOL nCol, SCROW nRow, SCTAB nTab, const ScPatternAttr& rAttr,
sal_Bool bPutToPool )
{
- if (VALIDTAB(nTab))
+ if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()))
if (pTab[nTab])
pTab[nTab]->SetPattern( nCol, nRow, rAttr, bPutToPool );
}
@@ -4210,7 +4211,7 @@ void ScDocument::SetPattern( const ScAddress& rPos, const ScPatternAttr& rAttr,
sal_Bool bPutToPool )
{
SCTAB nTab = rPos.Tab();
- if (pTab[nTab])
+ if ( nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
pTab[nTab]->SetPattern( rPos, rAttr, bPutToPool );
}
@@ -4221,7 +4222,7 @@ ScPatternAttr* ScDocument::CreateSelectionPattern( const ScMarkData& rMark, sal_
if ( rMark.IsMultiMarked() ) // multi selection
{
- for (SCTAB i=0; i<=MAXTAB; i++)
+ for (SCTAB i=0; i< static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i] && rMark.GetTableSelect(i))
pTab[i]->MergeSelectionPattern( aState, rMark, bDeep );
}
@@ -4229,7 +4230,7 @@ ScPatternAttr* ScDocument::CreateSelectionPattern( const ScMarkData& rMark, sal_
{
ScRange aRange;
rMark.GetMarkArea(aRange);
- for (SCTAB i=0; i<=MAXTAB; i++)
+ for (SCTAB i=0; i< static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i] && rMark.GetTableSelect(i))
pTab[i]->MergePatternArea( aState,
aRange.aStart.Col(), aRange.aStart.Row(),
@@ -4276,7 +4277,7 @@ void ScDocument::GetSelectionFrame( const ScMarkData& rMark,
rMark.GetMarkArea(aRange);
rLineInner.EnableHor( aRange.aStart.Row() != aRange.aEnd.Row() );
rLineInner.EnableVer( aRange.aStart.Col() != aRange.aEnd.Col() );
- for (SCTAB i=0; i<=MAXTAB; i++)
+ for (SCTAB i=0; i< static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i] && rMark.GetTableSelect(i))
pTab[i]->MergeBlockFrame( &rLineOuter, &rLineInner, aFlags,
aRange.aStart.Col(), aRange.aStart.Row(),
@@ -4351,7 +4352,7 @@ bool ScDocument::HasAttrib( SCCOL nCol1, SCROW nRow1, SCTAB nTab1,
return false;
bool bFound = false;
- for (SCTAB i=nTab1; i<=nTab2 && !bFound; i++)
+ for (SCTAB i=nTab1; i<=nTab2 && !bFound && i < static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i])
{
if ( nMask & HASATTR_RTL )
@@ -4386,7 +4387,7 @@ bool ScDocument::HasAttrib( const ScRange& rRange, sal_uInt16 nMask ) const
void ScDocument::FindMaxRotCol( SCTAB nTab, RowInfo* pRowInfo, SCSIZE nArrCount,
SCCOL nX1, SCCOL nX2 ) const
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
pTab[nTab]->FindMaxRotCol( pRowInfo, nArrCount, nX1, nX2 );
else
{
@@ -4450,7 +4451,7 @@ void ScDocument::GetBorderLines( SCCOL nCol, SCROW nRow, SCTAB nTab,
sal_Bool ScDocument::IsBlockEmpty( SCTAB nTab, SCCOL nStartCol, SCROW nStartRow,
SCCOL nEndCol, SCROW nEndRow, bool bIgnoreNotes ) const
{
- if (VALIDTAB(nTab))
+ if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()))
if (pTab[nTab])
return pTab[nTab]->IsBlockEmpty( nStartCol, nStartRow, nEndCol, nEndRow, bIgnoreNotes );
@@ -4461,7 +4462,7 @@ sal_Bool ScDocument::IsBlockEmpty( SCTAB nTab, SCCOL nStartCol, SCROW nStartRow,
void ScDocument::LockTable(SCTAB nTab)
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
pTab[nTab]->LockTable();
else
{
@@ -4472,7 +4473,7 @@ void ScDocument::LockTable(SCTAB nTab)
void ScDocument::UnlockTable(SCTAB nTab)
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
pTab[nTab]->UnlockTable();
else
{
@@ -4493,7 +4494,7 @@ sal_Bool ScDocument::IsBlockEditable( SCTAB nTab, SCCOL nStartCol, SCROW nStartR
return false;
}
- if (VALIDTAB(nTab))
+ if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()))
if (pTab[nTab])
return pTab[nTab]->IsBlockEditable( nStartCol, nStartRow, nEndCol,
nEndRow, pOnlyNotBecauseOfMatrix );
@@ -4521,7 +4522,7 @@ sal_Bool ScDocument::IsSelectionEditable( const ScMarkData& rMark,
sal_Bool bOk = sal_True;
sal_Bool bMatrix = ( pOnlyNotBecauseOfMatrix != NULL );
- for ( SCTAB i=0; i<=MAXTAB && (bOk || bMatrix); i++ )
+ for ( SCTAB i=0; i< static_cast<SCTAB>(pTab.size()) && (bOk || bMatrix); i++ )
{
if ( pTab[i] && rMark.GetTableSelect(i) )
{
@@ -4560,7 +4561,7 @@ sal_Bool ScDocument::HasSelectedBlockMatrixFragment( SCCOL nStartCol, SCROW nSta
const ScMarkData& rMark ) const
{
sal_Bool bOk = sal_True;
- for (SCTAB i=0; i<=MAXTAB && bOk; i++)
+ for (SCTAB i=0; i< static_cast<SCTAB>(pTab.size()) && bOk; i++)
if (pTab[i])
if (rMark.GetTableSelect(i))
if (pTab[i]->HasBlockMatrixFragment( nStartCol, nStartRow, nEndCol, nEndRow ))
@@ -4572,7 +4573,7 @@ sal_Bool ScDocument::HasSelectedBlockMatrixFragment( SCCOL nStartCol, SCROW nSta
sal_Bool ScDocument::HasSelectedBlockMatrixFragment( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, SCTAB nTab ) const
{
sal_Bool bOk = true;
- if ( pTab[nTab] && pTab[nTab]->HasBlockMatrixFragment( nStartCol, nStartRow, nEndCol, nEndRow ) )
+ if ( nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] && pTab[nTab]->HasBlockMatrixFragment( nStartCol, nStartRow, nEndCol, nEndRow ) )
{
bOk = false;
}
@@ -4630,7 +4631,7 @@ sal_Bool ScDocument::ExtendOverlapped( SCCOL& rStartCol, SCROW& rStartRow,
sal_Bool bFound = false;
if ( ValidColRow(rStartCol,rStartRow) && ValidColRow(nEndCol,nEndRow) && ValidTab(nTab) )
{
- if (pTab[nTab])
+ if (nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
{
SCCOL nCol;
SCCOL nOldCol = rStartCol;
@@ -4689,7 +4690,7 @@ sal_Bool ScDocument::ExtendMergeSel( SCCOL nStartCol, SCROW nStartRow,
SCCOL nOldEndCol = rEndCol;
SCROW nOldEndRow = rEndRow;
- for (SCTAB nTab = 0; nTab <= MAXTAB; nTab++)
+ for (SCTAB nTab = 0; nTab < static_cast<SCTAB>(pTab.size()); nTab++)
if ( pTab[nTab] && rMark.GetTableSelect(nTab) )
{
SCCOL nThisEndCol = nOldEndCol;
@@ -4713,7 +4714,7 @@ sal_Bool ScDocument::ExtendMerge( SCCOL nStartCol, SCROW nStartRow,
sal_Bool bFound = false;
if ( ValidColRow(nStartCol,nStartRow) && ValidColRow(rEndCol,rEndRow) && ValidTab(nTab) )
{
- if (pTab[nTab])
+ if (nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
bFound = pTab[nTab]->ExtendMerge( nStartCol, nStartRow, rEndCol, rEndRow, bRefresh, bAttrs );
if (bRefresh)
@@ -4737,7 +4738,7 @@ sal_Bool ScDocument::ExtendMerge( ScRange& rRange, sal_Bool bRefresh, sal_Bool b
SCROW nEndRow = rRange.aEnd.Row();
PutInOrder( nStartTab, nEndTab );
- for (SCTAB nTab = nStartTab; nTab <= nEndTab; nTab++ )
+ for (SCTAB nTab = nStartTab; nTab <= nEndTab && nTab < static_cast<SCTAB>(pTab.size()); nTab++ )
{
SCCOL nExtendCol = rRange.aEnd.Col();
SCROW nExtendRow = rRange.aEnd.Row();
@@ -4796,7 +4797,7 @@ sal_Bool ScDocument::ExtendOverlapped( ScRange& rRange )
SCROW nStartRow = rRange.aStart.Row();
PutInOrder( nStartTab, nEndTab );
- for (SCTAB nTab = nStartTab; nTab <= nEndTab; nTab++ )
+ for (SCTAB nTab = nStartTab; nTab <= nEndTab && nTab < static_cast<SCTAB>(pTab.size()); nTab++ )
{
SCCOL nExtendCol = rRange.aStart.Col();
SCROW nExtendRow = rRange.aStart.Row();
@@ -4853,7 +4854,7 @@ sal_Bool ScDocument::RefreshAutoFilter( SCCOL nStartCol, SCROW nStartRow,
}
}
}
- if (pTab[nTab])
+ if (nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
pData = pTab[nTab]->GetAnonymousDBData();
else
pData=NULL;
@@ -4917,7 +4918,7 @@ void ScDocument::ApplySelectionFrame( const ScMarkData& rMark,
ScRangeList aRangeList;
rMark.FillRangeListWithMarks( &aRangeList, false );
size_t nRangeCount = aRangeList.size();
- for (SCTAB i=0; i<=MAXTAB; i++)
+ for (SCTAB i=0; i< static_cast<SCTAB>(pTab.size()); i++)
{
if (pTab[i] && rMark.GetTableSelect(i))
{
@@ -4939,7 +4940,7 @@ void ScDocument::ApplyFrameAreaTab( const ScRange& rRange,
{
SCTAB nStartTab = rRange.aStart.Tab();
SCTAB nEndTab = rRange.aStart.Tab();
- for (SCTAB nTab=nStartTab; nTab<=nEndTab; nTab++)
+ for (SCTAB nTab=nStartTab; nTab<=nEndTab && nTab < static_cast<SCTAB>(pTab.size()); nTab++)
if (pTab[nTab])
pTab[nTab]->ApplyBlockFrame( pLineOuter, pLineInner,
rRange.aStart.Col(), rRange.aStart.Row(),
@@ -4969,7 +4970,7 @@ void ScDocument::ApplySelectionPattern( const ScPatternAttr& rAttr, const ScMark
else
{
SfxItemPoolCache aCache( xPoolHelper->GetDocPool(), pSet );
- for (SCTAB nTab=0; nTab<=MAXTAB; nTab++)
+ for (SCTAB nTab=0; nTab< static_cast<SCTAB>(pTab.size()); nTab++)
if (pTab[nTab])
if (rMark.GetTableSelect(nTab))
pTab[nTab]->ApplySelectionCache( &aCache, rMark, pDataArray );
@@ -4980,7 +4981,7 @@ void ScDocument::ApplySelectionPattern( const ScPatternAttr& rAttr, const ScMark
void ScDocument::ChangeSelectionIndent( sal_Bool bIncrement, const ScMarkData& rMark )
{
- for (SCTAB i=0; i<=MAXTAB; i++)
+ for (SCTAB i=0; i< static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i] && rMark.GetTableSelect(i))
pTab[i]->ChangeSelectionIndent( bIncrement, rMark );
}
@@ -4988,7 +4989,7 @@ void ScDocument::ChangeSelectionIndent( sal_Bool bIncrement, const ScMarkData& r
void ScDocument::ClearSelectionItems( const sal_uInt16* pWhich, const ScMarkData& rMark )
{
- for (SCTAB i=0; i<=MAXTAB; i++)
+ for (SCTAB i=0; i< static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i] && rMark.GetTableSelect(i))
pTab[i]->ClearSelectionItems( pWhich, rMark );
}
@@ -4996,7 +4997,7 @@ void ScDocument::ClearSelectionItems( const sal_uInt16* pWhich, const ScMarkData
void ScDocument::DeleteSelection( sal_uInt16 nDelFlag, const ScMarkData& rMark )
{
- for (SCTAB i=0; i<=MAXTAB; i++)
+ for (SCTAB i=0; i< static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i] && rMark.GetTableSelect(i))
pTab[i]->DeleteSelection( nDelFlag, rMark );
}
@@ -5004,7 +5005,7 @@ void ScDocument::DeleteSelection( sal_uInt16 nDelFlag, const ScMarkData& rMark )
void ScDocument::DeleteSelectionTab( SCTAB nTab, sal_uInt16 nDelFlag, const ScMarkData& rMark )
{
- if (ValidTab(nTab) && pTab[nTab])
+ if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
pTab[nTab]->DeleteSelection( nDelFlag, rMark );
else
{
@@ -5038,7 +5039,7 @@ SCSIZE ScDocument::GetEmptyLinesInBlock( SCCOL nStartCol, SCROW nStartRow, SCTAB
PutInOrder(nStartCol, nEndCol);
PutInOrder(nStartRow, nEndRow);
PutInOrder(nStartTab, nEndTab);
- if (VALIDTAB(nStartTab))
+ if (VALIDTAB(nStartTab) && nStartTab < static_cast<SCTAB>(pTab.size()))
{
if (pTab[nStartTab])
return pTab[nStartTab]->GetEmptyLinesInBlock(nStartCol, nStartRow, nEndCol, nEndRow, eDir);
@@ -5052,7 +5053,7 @@ SCSIZE ScDocument::GetEmptyLinesInBlock( SCCOL nStartCol, SCROW nStartRow, SCTAB
void ScDocument::FindAreaPos( SCCOL& rCol, SCROW& rRow, SCTAB nTab, SCsCOL nMovX, SCsROW nMovY )
{
- if (ValidTab(nTab) && pTab[nTab])
+ if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
pTab[nTab]->FindAreaPos( rCol, rRow, nMovX, nMovY );
}
@@ -5066,7 +5067,7 @@ void ScDocument::GetNextPos( SCCOL& rCol, SCROW& rRow, SCTAB nTab, SCsCOL nMovX,
aCopyMark.SetMarking(false);
aCopyMark.MarkToMulti();
- if (ValidTab(nTab) && pTab[nTab])
+ if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
pTab[nTab]->GetNextPos( rCol, rRow, nMovX, nMovY, bMarked, bUnprotected, aCopyMark );
}
@@ -5115,7 +5116,7 @@ sal_uLong ScDocument::GetCellCount() const
{
sal_uLong nCellCount = 0L;
- for ( SCTAB nTab=0; nTab<=MAXTAB; nTab++ )
+ for ( SCTAB nTab=0; nTab< static_cast<SCTAB>(pTab.size()); nTab++ )
if ( pTab[nTab] )
nCellCount += pTab[nTab]->GetCellCount();
@@ -5124,7 +5125,7 @@ sal_uLong ScDocument::GetCellCount() const
SCSIZE ScDocument::GetCellCount(SCTAB nTab, SCCOL nCol) const
{
- if (!ValidTab(nTab) || !pTab[nTab])
+ if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab])
return 0;
return pTab[nTab]->GetCellCount(nCol);
@@ -5134,7 +5135,7 @@ sal_uLong ScDocument::GetCodeCount() const
{
sal_uLong nCodeCount = 0;
- for ( SCTAB nTab=0; nTab<=MAXTAB; nTab++ )
+ for ( SCTAB nTab=0; nTab< static_cast<SCTAB>(pTab.size()); nTab++ )
if ( pTab[nTab] )
nCodeCount += pTab[nTab]->GetCodeCount();
@@ -5144,21 +5145,21 @@ sal_uLong ScDocument::GetCodeCount() const
void ScDocument::PageStyleModified( SCTAB nTab, const String& rNewName )
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
pTab[nTab]->PageStyleModified( rNewName );
}
void ScDocument::SetPageStyle( SCTAB nTab, const String& rName )
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
pTab[nTab]->SetPageStyle( rName );
}
const String& ScDocument::GetPageStyle( SCTAB nTab ) const
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
return pTab[nTab]->GetPageStyle();
return EMPTY_STRING;
@@ -5167,13 +5168,13 @@ const String& ScDocument::GetPageStyle( SCTAB nTab ) const
void ScDocument::SetPageSize( SCTAB nTab, const Size& rSize )
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
pTab[nTab]->SetPageSize( rSize );
}
Size ScDocument::GetPageSize( SCTAB nTab ) const
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
return pTab[nTab]->GetPageSize();
OSL_FAIL("falsche Tab");
@@ -5183,31 +5184,31 @@ Size ScDocument::GetPageSize( SCTAB nTab ) const
void ScDocument::SetRepeatArea( SCTAB nTab, SCCOL nStartCol, SCCOL nEndCol, SCROW nStartRow, SCROW nEndRow )
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
pTab[nTab]->SetRepeatArea( nStartCol, nEndCol, nStartRow, nEndRow );
}
void ScDocument::InvalidatePageBreaks(SCTAB nTab)
{
- if (ValidTab(nTab) && pTab[nTab])
+ if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
pTab[nTab]->InvalidatePageBreaks();
}
void ScDocument::UpdatePageBreaks( SCTAB nTab, const ScRange* pUserArea )
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
pTab[nTab]->UpdatePageBreaks( pUserArea );
}
void ScDocument::RemoveManualBreaks( SCTAB nTab )
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
pTab[nTab]->RemoveManualBreaks();
}
sal_Bool ScDocument::HasManualBreaks( SCTAB nTab ) const
{
- if ( ValidTab(nTab) && pTab[nTab] )
+ if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] )
return pTab[nTab]->HasManualBreaks();
OSL_FAIL("falsche Tab");
@@ -5227,7 +5228,7 @@ sal_Bool ScDocument::HasPrintRange()
{
sal_Bool bResult = false;
- for ( SCTAB i=0; !bResult && i<nMaxTableNumber; i++ )
+ for ( SCTAB i=0; !bResult && i<static_cast<SCTAB>(pTab.size()); i++ )
if ( pTab[i] )
bResult = pTab[i]->IsPrintEntireSheet() || (pTab[i]->GetPrintRangeCount() > 0);
@@ -5237,13 +5238,13 @@ sal_Bool ScDocument::HasPrintRange()
sal_Bool ScDocument::IsPrintEntireSheet( SCTAB nTab ) const
{
- return (ValidTab(nTab) ) && pTab[nTab] && pTab[nTab]->IsPrintEntireSheet();
+ return (ValidTab(nTab) ) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] && pTab[nTab]->IsPrintEntireSheet();
}
sal_uInt16 ScDocument::GetPrintRangeCount( SCTAB nTab )
{
- if (ValidTab(nTab) && pTab[nTab])
+ if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
return pTab[nTab]->GetPrintRangeCount();
return 0;
@@ -5252,7 +5253,7 @@ sal_uInt16 ScDocument::GetPrintRangeCount( SCTAB nTab )
const ScRange* ScDocument::GetPrintRange( SCTAB nTab, sal_uInt16 nPos )
{
- if (ValidTab(nTab) && pTab[nTab])
+ if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
return pTab[nTab]->GetPrintRange(nPos);
return NULL;
@@ -5261,7 +5262,7 @@ const ScRange* ScDocument::GetPrintRange( SCTAB nTab, sal_uInt16 nPos )
const ScRange* ScDocument::GetRepeatColRange( SCTAB nTab )
{
- if (ValidTab(nTab) && pTab[nTab])
+ if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
return pTab[nTab]->GetRepeatColRange();
return NULL;
@@ -5270,7 +5271,7 @@ const ScRange* ScDocument::GetRepeatColRange( SCTAB nTab )
const ScRange* ScDocument::GetRepeatRowRange( SCTAB nTab )
{
- if (ValidTab(nTab) && pTab[nTab])
+ if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
return pTab[nTab]->GetRepeatRowRange();
return NULL;
@@ -5279,42 +5280,42 @@ const ScRange* ScDocument::GetRepeatRowRange( SCTAB nTab )
void ScDocument::ClearPrintRanges( SCTAB nTab )
{
- if (ValidTab(nTab) && pTab[nTab])
+ if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
pTab[nTab]->ClearPrintRanges();
}
void ScDocument::AddPrintRange( SCTAB nTab, const ScRange& rNew )
{
- if (ValidTab(nTab) && pTab[nTab])
+ if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
pTab[nTab]->AddPrintRange( rNew );
}
void ScDocument::SetPrintEntireSheet( SCTAB nTab )
{
- if (ValidTab(nTab) && pTab[nTab])
+ if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
pTab[nTab]->SetPrintEntireSheet();
}
void ScDocument::SetRepeatColRange( SCTAB nTab, const ScRange* pNew )
{
- if (ValidTab(nTab) && pTab[nTab])
+ if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
pTab[nTab]->SetRepeatColRange( pNew );
}
void ScDocument::SetRepeatRowRange( SCTAB nTab, const ScRange* pNew )
{
- if (ValidTab(nTab) && pTab[nTab])
+ if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
pTab[nTab]->SetRepeatRowRange( pNew );
}
ScPrintRangeSaver* ScDocument::CreatePrintRangeSaver() const
{
- SCTAB nCount = GetTableCount();
+ SCTAB nCount = static_cast<SCTAB>(pTab.size());
ScPrintRangeSaver* pNew = new ScPrintRangeSaver( nCount );
for (SCTAB i=0; i<nCount; i++)
if (pTab[i])
@@ -5326,7 +5327,7 @@ ScPrintRangeSaver* ScDocument::CreatePrintRangeSaver() const
void ScDocument::RestorePrintRanges( const ScPrintRangeSaver& rSaver )
{
SCTAB nCount = rSaver.GetTabCount();
- for (SCTAB i=0; i<nCount; i++)
+ for (SCTAB i=0; i<nCount && i < static_cast<SCTAB>(pTab.size()); i++)
if (pTab[i])
pTab[i]->RestorePrintRanges( rSaver.GetTabData(i) );
}
@@ -5338,7 +5339,7 @@ sal_Bool ScDocument::NeedPageResetAfterTab( SCTAB nTab ) const
// andere Vorlage als bei der vorherigen gesetzt ist (nur Namen vergleichen)
// und eine Seitennummer angegeben ist (nicht 0)
- if ( nTab < MAXTAB && pTab[nTab] && pTab[nTab+1] )
+ if ( nTab + 1 < static_cast<SCTAB>(pTab.size()) && pTab[nTab] && pTab[nTab+1] )
{
String aNew = pTab[nTab+1]->GetPageStyle();
if ( aNew != pTab[nTab]->GetPageStyle() )
@@ -5366,7 +5367,7 @@ SfxUndoManager* ScDocument::GetUndoManager()
ScRowBreakIterator* ScDocument::GetRowBreakIterator(SCTAB nTab) const
{
- if (ValidTab(nTab) && pTab[nTab])
+ if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab])
return new ScRowBreakIterator(pTab[nTab]->maRowPageBreaks);
return NULL;
}
diff --git a/sc/source/core/data/markdata.cxx b/sc/source/core/data/markdata.cxx
index b5627a8d162a..0e5020deeece 100644
--- a/sc/source/core/data/markdata.cxx
+++ b/sc/source/core/data/markdata.cxx
@@ -46,25 +46,20 @@
ScMarkData::ScMarkData() :
pMultiSel( NULL )
{
- for (SCTAB i=0; i<=MAXTAB; i++)
- bTabMarked[i] = false;
-
ResetMark();
}
ScMarkData::ScMarkData(const ScMarkData& rData) :
aMarkRange( rData.aMarkRange ),
aMultiRange( rData.aMultiRange ),
- pMultiSel( NULL )
+ pMultiSel( NULL ),
+ maTabMarked( rData.maTabMarked )
{
bMarked = rData.bMarked;
bMultiMarked = rData.bMultiMarked;
bMarking = rData.bMarking;
bMarkIsNeg = rData.bMarkIsNeg;
- for (SCTAB i=0; i<=MAXTAB; i++)
- bTabMarked[i] = rData.bTabMarked[i];
-
if (rData.pMultiSel)
{
pMultiSel = new ScMarkArray[MAXCOLCOUNT];
@@ -88,8 +83,7 @@ ScMarkData& ScMarkData::operator=(const ScMarkData& rData)
bMarking = rData.bMarking;
bMarkIsNeg = rData.bMarkIsNeg;
- for (SCTAB i=0; i<=MAXTAB; i++)
- bTabMarked[i] = rData.bTabMarked[i];
+ maTabMarked = std::set<SCTAB>(rData.maTabMarked);
if (rData.pMultiSel)
{
@@ -125,7 +119,7 @@ void ScMarkData::SetMarkArea( const ScRange& rRange )
// may query (default) attributes although no sheet is marked yet.
// => mark that one.
if ( !GetSelectCount() )
- bTabMarked[ aMarkRange.aStart.Tab() ] = sal_True;
+ maTabMarked.insert( aMarkRange.aStart.Tab() );
bMarked = sal_True;
}
}
@@ -191,27 +185,38 @@ void ScMarkData::SetAreaTab( SCTAB nTab )
aMultiRange.aEnd.SetTab(nTab);
}
+void ScMarkData::SelectTable( SCTAB nTab, bool bNew )
+{
+ if ( bNew )
+ {
+ maTabMarked.insert( nTab );
+ }
+ else
+ {
+ maTabMarked.erase( maTabMarked.find( nTab ) );
+ }
+}
+
+bool ScMarkData::GetTableSelect( SCTAB nTab ) const
+{
+ return (maTabMarked.find( nTab ) != maTabMarked.end());
+}
+
void ScMarkData::SelectOneTable( SCTAB nTab )
{
- for (SCTAB i=0; i<=MAXTAB; i++)
- bTabMarked[i] = ( nTab == i );
+ maTabMarked.clear();
+ maTabMarked.insert( nTab );
}
SCTAB ScMarkData::GetSelectCount() const
{
- SCTAB nCount = 0;
- for (SCTAB i=0; i<=MAXTAB; i++)
- if (bTabMarked[i])
- ++nCount;
-
- return nCount;
+ return static_cast<SCTAB> ( maTabMarked.size() );
}
SCTAB ScMarkData::GetFirstSelected() const
{
- for (SCTAB i=0; i<=MAXTAB; i++)
- if (bTabMarked[i])
- return i;
+ if (maTabMarked.size() > 0)
+ return (*maTabMarked.begin());
OSL_FAIL("GetFirstSelected: keine markiert");
return 0;
@@ -340,8 +345,7 @@ void ScMarkData::MarkFromRangeList( const ScRangeList& rList, sal_Bool bReset )
{
if (bReset)
{
- for (SCTAB i=0; i<=MAXTAB; i++)
- bTabMarked[i] = false; // Tabellen sind nicht in ResetMark
+ maTabMarked.clear();
ResetMark();
}
@@ -400,7 +404,7 @@ void ScMarkData::FillRangeListWithMarks( ScRangeList* pList, sal_Bool bClear ) c
pList->Append( aMarkRange );
}
-void ScMarkData::ExtendRangeListTables( ScRangeList* pList ) const
+void ScMarkData::ExtendRangeListTables( ScRangeList* pList ) const//TODO:FIXME
{
if (!pList)
return;
@@ -408,16 +412,14 @@ void ScMarkData::ExtendRangeListTables( ScRangeList* pList ) const
ScRangeList aOldList(*pList);
pList->RemoveAll(); //! oder die vorhandenen unten weglassen
- for (SCTAB nTab=0; nTab<=MAXTAB; nTab++)
- if (bTabMarked[nTab])
+ std::set<SCTAB>::iterator it = maTabMarked.begin();
+ for (; it != maTabMarked.end(); ++it)
+ for ( size_t i=0, nCount = aOldList.size(); i<nCount; i++)
{
- for ( size_t i=0, nCount = aOldList.size(); i<nCount; i++)
- {
- ScRange aRange = *aOldList[ i ];
- aRange.aStart.SetTab(nTab);
- aRange.aEnd.SetTab(nTab);
- pList->Append( aRange );
- }
+ ScRange aRange = *aOldList[ i ];
+ aRange.aStart.SetTab(*it);
+ aRange.aEnd.SetTab(*it);
+ pList->Append( aRange );
}
}
@@ -590,16 +592,12 @@ sal_Bool ScMarkData::HasAnyMultiMarks() const
void ScMarkData::InsertTab( SCTAB nTab )
{
- for (SCTAB i=MAXTAB; i>nTab; i--)
- bTabMarked[i] = bTabMarked[i-1];
- bTabMarked[nTab] = false;
+ maTabMarked.insert( nTab );
}
void ScMarkData::DeleteTab( SCTAB nTab )
{
- for (SCTAB i=nTab; i<MAXTAB; i++)
- bTabMarked[i] = bTabMarked[i+1];
- bTabMarked[MAXTAB] = false;
+ maTabMarked.erase( maTabMarked.find( nTab ) );
}