diff options
author | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2011-05-16 22:53:26 +0200 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2011-05-16 22:53:26 +0200 |
commit | 18767cccea159d405710fd068b1bc67d90b287d9 (patch) | |
tree | 7e8d572700cd270cd725c53a6172329d76152743 /sc | |
parent | ca8a159af4fb1e15a4c0f78d4d6577d1a6db025d (diff) |
make some more methods work correctly with unlimited number of sheets
Diffstat (limited to 'sc')
-rw-r--r-- | sc/inc/markdata.hxx | 8 | ||||
-rw-r--r-- | sc/source/core/data/documen2.cxx | 111 | ||||
-rw-r--r-- | sc/source/core/data/document.cxx | 639 | ||||
-rw-r--r-- | sc/source/core/data/markdata.cxx | 76 |
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 ) ); } |