diff options
author | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2011-05-17 01:37:48 +0200 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2011-05-17 01:37:48 +0200 |
commit | 139707bb61ad2d129ba98a0c7b5b1a0a264922c9 (patch) | |
tree | 6497f911c3f8e4c88638f4df648e315ccb9d6342 /sc | |
parent | 0141fe850626ee99129f5c871e0c87e2e9bec381 (diff) |
rework most of the ScDocument methods
it compiles and the unit test does not fail
Diffstat (limited to 'sc')
-rw-r--r-- | sc/inc/document.hxx | 4 | ||||
-rw-r--r-- | sc/source/core/data/documen2.cxx | 26 | ||||
-rw-r--r-- | sc/source/core/data/documen3.cxx | 166 | ||||
-rw-r--r-- | sc/source/core/data/documen4.cxx | 64 | ||||
-rw-r--r-- | sc/source/core/data/documen5.cxx | 18 | ||||
-rw-r--r-- | sc/source/core/data/documen7.cxx | 8 | ||||
-rw-r--r-- | sc/source/core/data/documen8.cxx | 16 | ||||
-rw-r--r-- | sc/source/core/data/documen9.cxx | 23 | ||||
-rw-r--r-- | sc/source/core/data/document.cxx | 6 |
9 files changed, 172 insertions, 159 deletions
diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx index e3039dd83896..46b10385b8ca 100644 --- a/sc/inc/document.hxx +++ b/sc/inc/document.hxx @@ -472,7 +472,7 @@ public: SC_DLLPUBLIC ScRangeName* GetRangeName() const; void SetRangeName(SCTAB nTab, ScRangeName* pNew); void SetRangeName( ScRangeName* pNewRangeName ); - SCTAB GetMaxTableNumber() { return nMaxTableNumber; } + SCTAB GetMaxTableNumber() { return static_cast<SCTAB>(pTab.size()); } void SetMaxTableNumber(SCTAB nNumber) { nMaxTableNumber = nNumber; } ScRangePairList* GetColNameRanges() { return &xColNameRanges; } @@ -534,7 +534,7 @@ public: SC_DLLPUBLIC void SetAnonymousDBData(SCTAB nTab, ScDBData* pDBData); SC_DLLPUBLIC ScDBData* GetAnonymousDBData(SCTAB nTab); - SC_DLLPUBLIC inline SCTAB GetTableCount() const { return nMaxTableNumber; } + SC_DLLPUBLIC inline SCTAB GetTableCount() const { return static_cast<SCTAB>(pTab.size()); } SvNumberFormatterIndexTable* GetFormatExchangeList() const { return pFormatExchangeList; } SC_DLLPUBLIC ScDocProtection* GetDocProtection() const; diff --git a/sc/source/core/data/documen2.cxx b/sc/source/core/data/documen2.cxx index 2eb059b872c1..f3b9703338d7 100644 --- a/sc/source/core/data/documen2.cxx +++ b/sc/source/core/data/documen2.cxx @@ -139,7 +139,7 @@ ScDocument::ScDocument( ScDocumentMode eMode, pCondFormList( NULL ), pValidationList( NULL ), pFormatExchangeList( NULL ), - pTab( 10 ), + pTab( 0 ), pRangeName(NULL), pDPCollection( NULL ), pLinkManager( NULL ), @@ -551,7 +551,7 @@ ScNoteEditEngine& ScDocument::GetNoteEngine() } -void ScDocument::ResetClip( ScDocument* pSourceDoc, const ScMarkData* pMarks )//TODO:FIXME +void ScDocument::ResetClip( ScDocument* pSourceDoc, const ScMarkData* pMarks ) { if (bIsClip) { @@ -631,7 +631,7 @@ void ScDocument::PutCell( SCCOL nCol, SCROW nRow, SCTAB nTab, sal_Bool bExtras = !bIsUndo; // Spaltenbreiten, Zeilenhoehen, Flags if ( nTab >= static_cast<SCTAB>(pTab.size()) ) { - while( nTab > pTab.size() ) + while( nTab > static_cast<SCTAB>(pTab.size()) ) { pTab.push_back( NULL ); } @@ -752,7 +752,7 @@ sal_Bool ScDocument::MoveTab( SCTAB nOldPos, SCTAB nNewPos ) { if (pTab[nOldPos]) { - SCTAB nTabCount = pTab.size(); + SCTAB nTabCount = static_cast<SCTAB>(pTab.size()); if (nTabCount > 1) { sal_Bool bOldAutoCalc = GetAutoCalc(); @@ -796,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 < pTab.size(); i++) + for (i = 0; i < static_cast<SCTAB>(pTab.size()); i++) if (pTab[i]) pTab[i]->UpdateMoveTab( nOldPos, nNewPos, i, *pProgress ); delete pProgress; // freimachen fuer evtl. andere - for (i = 0; i < pTab.size(); i++) + for (i = 0; i < static_cast<SCTAB>(pTab.size()); i++) if (pTab[i]) pTab[i]->UpdateCompile(); SetNoListening( false ); - for (i = 0; i < pTab.size(); i++) + for (i = 0; i < static_cast<SCTAB>(pTab.size()); i++) if (pTab[i]) pTab[i]->StartAllListeners(); // sheet names of references may not be valid until sheet is moved @@ -824,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 = pTab.size(); + if (SC_TAB_APPEND == nNewPos ) nNewPos = static_cast<SCTAB>(pTab.size()); String aName; GetName(nOldPos, aName); @@ -846,13 +846,13 @@ sal_Bool ScDocument::CopyTab( SCTAB nOldPos, SCTAB nNewPos, const ScMarkData* pO SetAutoCalc( false ); // Mehrfachberechnungen vermeiden if (bValid) { - if (nNewPos >= pTab.size()) + if (nNewPos >= static_cast<SCTAB>(pTab.size())) { pTab.push_back( new ScTable(this, nMaxTableNumber, aName) ); } else { - if (VALIDTAB(nNewPos) && (nNewPos < pTab.size())) + if (VALIDTAB(nNewPos) && (nNewPos < static_cast<SCTAB>(pTab.size()))) { SetNoListening( sal_True ); @@ -876,7 +876,7 @@ sal_Bool ScDocument::CopyTab( SCTAB nOldPos, SCTAB nNewPos, const ScMarkData* pO for (TableContainer::iterator it = pTab.begin(); it != pTab.end(); ++it) if (*it && it != (pTab.begin() + nOldPos)) (*it)->UpdateInsertTab(nNewPos); - for (i = pTab.size(); i > nNewPos; i--) + for (i = static_cast<SCTAB>(pTab.size())-1; i > nNewPos; i--) pTab[i] = pTab[i - 1]; if (nNewPos <= nOldPos) nOldPos++; @@ -958,7 +958,7 @@ sal_uLong ScDocument::TransferTab( ScDocument* pSrcDoc, SCTAB nSrcPos, } else // bestehende Tabelle ersetzen { - if (VALIDTAB(nDestPos) && nDestPos < pTab.size() && pTab[nDestPos]) + if (VALIDTAB(nDestPos) && nDestPos < static_cast<SCTAB>(pTab.size()) && pTab[nDestPos]) { pTab[nDestPos]->DeleteArea( 0,0, MAXCOL,MAXROW, IDF_ALL ); } @@ -1151,7 +1151,7 @@ sal_uLong ScDocument::TransferTab( ScDocument* pSrcDoc, SCTAB nSrcPos, void ScDocument::SetError( SCCOL nCol, SCROW nRow, SCTAB nTab, const sal_uInt16 nError) { - if (VALIDTAB(nTab)) + if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size())) if (pTab[nTab]) pTab[nTab]->SetError( nCol, nRow, nError ); } diff --git a/sc/source/core/data/documen3.cxx b/sc/source/core/data/documen3.cxx index 9e01f96ecc24..58a2f7adaa66 100644 --- a/sc/source/core/data/documen3.cxx +++ b/sc/source/core/data/documen3.cxx @@ -91,7 +91,7 @@ using namespace com::sun::star; void ScDocument::GetAllTabRangeNames(ScRangeName::TabNameCopyMap& rNames) const { ScRangeName::TabNameCopyMap aNames; - for (SCTAB i = 0; i <= MAXTAB; ++i) + for (SCTAB i = 0; i < static_cast<SCTAB>(pTab.size()); ++i) { if (!pTab[i]) // no more tables to iterate through. @@ -110,7 +110,7 @@ void ScDocument::GetAllTabRangeNames(ScRangeName::TabNameCopyMap& rNames) const void ScDocument::SetAllTabRangeNames(const ScRangeName::TabNameCopyMap& rNames) { // Remove all existing range names first. - for (SCTAB i = 0; i <= MAXTAB; ++i) + for (SCTAB i = 0; i < static_cast<SCTAB>(pTab.size()); ++i) { if (!pTab[i]) // no more tables to iterate through. @@ -126,7 +126,7 @@ void ScDocument::SetAllTabRangeNames(const ScRangeName::TabNameCopyMap& rNames) ScRangeName* ScDocument::GetRangeName(SCTAB nTab) const { - if (!ValidTab(nTab) || !pTab[nTab]) + if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab]) return NULL; return pTab[nTab]->GetRangeName(); @@ -141,7 +141,7 @@ ScRangeName* ScDocument::GetRangeName() const void ScDocument::SetRangeName(SCTAB nTab, ScRangeName* pNew) { - if (!ValidTab(nTab) || !pTab[nTab]) + if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab]) return; return pTab[nTab]->SetRangeName(pNew); @@ -326,19 +326,19 @@ void ScDocument::SetChartListenerCollection( void ScDocument::SetScenario( SCTAB nTab, sal_Bool bFlag ) { - if (ValidTab(nTab) && pTab[nTab]) + if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) pTab[nTab]->SetScenario(bFlag); } sal_Bool ScDocument::IsScenario( SCTAB nTab ) const { - return ValidTab(nTab) && pTab[nTab] &&pTab[nTab]->IsScenario(); + return ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] &&pTab[nTab]->IsScenario(); } void ScDocument::SetScenarioData( SCTAB nTab, const String& rComment, const Color& rColor, sal_uInt16 nFlags ) { - if (ValidTab(nTab) && pTab[nTab] && pTab[nTab]->IsScenario()) + if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] && pTab[nTab]->IsScenario()) { pTab[nTab]->SetScenarioComment( rComment ); pTab[nTab]->SetScenarioColor( rColor ); @@ -348,20 +348,20 @@ void ScDocument::SetScenarioData( SCTAB nTab, const String& rComment, Color ScDocument::GetTabBgColor( SCTAB nTab ) const { - if (ValidTab(nTab) && pTab[nTab]) + if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) return pTab[nTab]->GetTabBgColor(); return Color(COL_AUTO); } void ScDocument::SetTabBgColor( SCTAB nTab, const Color& rColor ) { - if (ValidTab(nTab) && pTab[nTab]) + if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) pTab[nTab]->SetTabBgColor(rColor); } bool ScDocument::IsDefaultTabBgColor( SCTAB nTab ) const { - if (ValidTab(nTab) && pTab[nTab]) + if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) return pTab[nTab]->GetTabBgColor() == COL_AUTO; return true; } @@ -369,7 +369,7 @@ bool ScDocument::IsDefaultTabBgColor( SCTAB nTab ) const void ScDocument::GetScenarioData( SCTAB nTab, String& rComment, Color& rColor, sal_uInt16& rFlags ) const { - if (ValidTab(nTab) && pTab[nTab] && pTab[nTab]->IsScenario()) + if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] && pTab[nTab]->IsScenario()) { pTab[nTab]->GetScenarioComment( rComment ); rColor = pTab[nTab]->GetScenarioColor(); @@ -379,13 +379,13 @@ void ScDocument::GetScenarioData( SCTAB nTab, String& rComment, void ScDocument::GetScenarioFlags( SCTAB nTab, sal_uInt16& rFlags ) const { - if (VALIDTAB(nTab) && pTab[nTab] && pTab[nTab]->IsScenario()) + if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] && pTab[nTab]->IsScenario()) rFlags = pTab[nTab]->GetScenarioFlags(); } sal_Bool ScDocument::IsLinked( SCTAB nTab ) const { - return ValidTab(nTab) && pTab[nTab] && pTab[nTab]->IsLinked(); + return ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] && pTab[nTab]->IsLinked(); // euqivalent to //if (ValidTab(nTab) && pTab[nTab]) // return pTab[nTab]->IsLinked(); @@ -409,42 +409,42 @@ void ScDocument::SetGrammar( formula::FormulaGrammar::Grammar eGram ) sal_Bool ScDocument::GetLinkMode( SCTAB nTab ) const { - if (ValidTab(nTab) && pTab[nTab]) + if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) return pTab[nTab]->GetLinkMode(); return SC_LINK_NONE; } const String& ScDocument::GetLinkDoc( SCTAB nTab ) const { - if (ValidTab(nTab) && pTab[nTab]) + if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) return pTab[nTab]->GetLinkDoc(); return EMPTY_STRING; } const String& ScDocument::GetLinkFlt( SCTAB nTab ) const { - if (ValidTab(nTab) && pTab[nTab]) + if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) return pTab[nTab]->GetLinkFlt(); return EMPTY_STRING; } const String& ScDocument::GetLinkOpt( SCTAB nTab ) const { - if (ValidTab(nTab) && pTab[nTab]) + if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) return pTab[nTab]->GetLinkOpt(); return EMPTY_STRING; } const String& ScDocument::GetLinkTab( SCTAB nTab ) const { - if (ValidTab(nTab) && pTab[nTab]) + if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) return pTab[nTab]->GetLinkTab(); return EMPTY_STRING; } sal_uLong ScDocument::GetLinkRefreshDelay( SCTAB nTab ) const { - if (ValidTab(nTab) && pTab[nTab]) + if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) return pTab[nTab]->GetLinkRefreshDelay(); return 0; } @@ -453,14 +453,14 @@ void ScDocument::SetLink( SCTAB nTab, sal_uInt8 nMode, const String& rDoc, const String& rFilter, const String& rOptions, const String& rTabName, sal_uLong nRefreshDelay ) { - if (ValidTab(nTab) && pTab[nTab]) + if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) pTab[nTab]->SetLink( nMode, rDoc, rFilter, rOptions, rTabName, nRefreshDelay ); } sal_Bool ScDocument::HasLink( const String& rDoc, const String& rFilter, const String& rOptions ) const { - SCTAB nCount = GetTableCount(); + SCTAB nCount = static_cast<SCTAB>(pTab.size()); for (SCTAB i=0; i<nCount; i++) if (pTab[i]->IsLinked() && pTab[i]->GetLinkDoc() == rDoc @@ -561,20 +561,20 @@ ScFormulaParserPool& ScDocument::GetFormulaParserPool() const const ScSheetEvents* ScDocument::GetSheetEvents( SCTAB nTab ) const { - if (VALIDTAB(nTab) && pTab[nTab]) + if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) return pTab[nTab]->GetSheetEvents(); return NULL; } void ScDocument::SetSheetEvents( SCTAB nTab, const ScSheetEvents* pNew ) { - if (VALIDTAB(nTab) && pTab[nTab]) + if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) pTab[nTab]->SetSheetEvents( pNew ); } bool ScDocument::HasSheetEventScript( SCTAB nTab, sal_Int32 nEvent, bool bWithVbaEvents ) const { - if (pTab[nTab]) + if (nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) { // check if any event handler script has been configured const ScSheetEvents* pEvents = pTab[nTab]->GetSheetEvents(); @@ -598,7 +598,7 @@ bool ScDocument::HasSheetEventScript( SCTAB nTab, sal_Int32 nEvent, bool bWithVb bool ScDocument::HasAnySheetEventScript( sal_Int32 nEvent, bool bWithVbaEvents ) const { - for (SCTAB nTab = 0; nTab <= MAXTAB; nTab++) + for (SCTAB nTab = 0; nTab < static_cast<SCTAB>(pTab.size()); nTab++) if (HasSheetEventScript( nTab, nEvent, bWithVbaEvents )) return true; return false; @@ -606,7 +606,7 @@ bool ScDocument::HasAnySheetEventScript( sal_Int32 nEvent, bool bWithVbaEvents ) bool ScDocument::HasAnyCalcNotification() const { - for (SCTAB nTab = 0; nTab <= MAXTAB; nTab++) + for (SCTAB nTab = 0; nTab < static_cast<SCTAB>(pTab.size()); nTab++) if (pTab[nTab] && pTab[nTab]->GetCalcNotification()) return true; return false; @@ -614,7 +614,7 @@ bool ScDocument::HasAnyCalcNotification() const sal_Bool ScDocument::HasCalcNotification( SCTAB nTab ) const { - if (VALIDTAB(nTab) && pTab[nTab]) + if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) return pTab[nTab]->GetCalcNotification(); return false; } @@ -622,13 +622,13 @@ sal_Bool ScDocument::HasCalcNotification( SCTAB nTab ) const void ScDocument::SetCalcNotification( SCTAB nTab ) { // set only if not set before - if (VALIDTAB(nTab) && pTab[nTab] && !pTab[nTab]->GetCalcNotification()) + if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] && !pTab[nTab]->GetCalcNotification()) pTab[nTab]->SetCalcNotification(sal_True); } void ScDocument::ResetCalcNotifications() { - for (SCTAB nTab = 0; nTab <= MAXTAB; nTab++) + for (SCTAB nTab = 0; nTab < static_cast<SCTAB>(pTab.size()); nTab++) if (pTab[nTab] && pTab[nTab]->GetCalcNotification()) pTab[nTab]->SetCalcNotification(false); } @@ -637,7 +637,7 @@ ScOutlineTable* ScDocument::GetOutlineTable( SCTAB nTab, sal_Bool bCreate ) { ScOutlineTable* pVal = NULL; - if (VALIDTAB(nTab)) + if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size())) if (pTab[nTab]) { pVal = pTab[nTab]->GetOutlineTable(); @@ -654,30 +654,30 @@ ScOutlineTable* ScDocument::GetOutlineTable( SCTAB nTab, sal_Bool bCreate ) sal_Bool ScDocument::SetOutlineTable( SCTAB nTab, const ScOutlineTable* pNewOutline ) { - return VALIDTAB(nTab) && pTab[nTab] && pTab[nTab]->SetOutlineTable(pNewOutline); + return VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] && pTab[nTab]->SetOutlineTable(pNewOutline); } void ScDocument::DoAutoOutline( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, SCTAB nTab ) { - if (VALIDTAB(nTab) && pTab[nTab]) + if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) pTab[nTab]->DoAutoOutline( nStartCol, nStartRow, nEndCol, nEndRow ); } sal_Bool ScDocument::TestRemoveSubTotals( SCTAB nTab, const ScSubTotalParam& rParam ) { - return VALIDTAB(nTab) && pTab[nTab] && pTab[nTab]->TestRemoveSubTotals( rParam ); + return VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] && pTab[nTab]->TestRemoveSubTotals( rParam ); } void ScDocument::RemoveSubTotals( SCTAB nTab, ScSubTotalParam& rParam ) { - if ( VALIDTAB(nTab) && pTab[nTab] ) + if ( VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] ) pTab[nTab]->RemoveSubTotals( rParam ); } sal_Bool ScDocument::DoSubTotals( SCTAB nTab, ScSubTotalParam& rParam ) { - return VALIDTAB(nTab) && pTab[nTab] && pTab[nTab]->DoSubTotals( rParam ); + return VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] && pTab[nTab]->DoSubTotals( rParam ); } sal_Bool ScDocument::HasSubTotalCells( const ScRange& rRange ) @@ -699,7 +699,7 @@ sal_Bool ScDocument::HasSubTotalCells( const ScRange& rRange ) void ScDocument::CopyUpdated( ScDocument* pPosDoc, ScDocument* pDestDoc ) { - SCTAB nCount = GetTableCount(); + SCTAB nCount = static_cast<SCTAB>(pTab.size()); for (SCTAB nTab=0; nTab<nCount; nTab++) if (pTab[nTab] && pPosDoc->pTab[nTab] && pDestDoc->pTab[nTab]) pTab[nTab]->CopyUpdated( pPosDoc->pTab[nTab], pDestDoc->pTab[nTab] ); @@ -707,7 +707,8 @@ void ScDocument::CopyUpdated( ScDocument* pPosDoc, ScDocument* pDestDoc ) void ScDocument::CopyScenario( SCTAB nSrcTab, SCTAB nDestTab, sal_Bool bNewScenario ) { - if (ValidTab(nSrcTab) && ValidTab(nDestTab) && pTab[nSrcTab] && pTab[nDestTab]) + if (ValidTab(nSrcTab) && ValidTab(nDestTab) && nSrcTab < static_cast<SCTAB>(pTab.size()) + && nDestTab < static_cast<SCTAB>(pTab.size()) && pTab[nSrcTab] && pTab[nDestTab]) { // Flags fuer aktive Szenarios richtig setzen // und aktuelle Werte in bisher aktive Szenarios zurueckschreiben @@ -716,7 +717,7 @@ void ScDocument::CopyScenario( SCTAB nSrcTab, SCTAB nDestTab, sal_Bool bNewScena // nDestTab ist die Zieltabelle for ( SCTAB nTab = nDestTab+1; - nTab<=MAXTAB && pTab[nTab] && pTab[nTab]->IsScenario(); + nTab< static_cast<SCTAB>(pTab.size()) && pTab[nTab] && pTab[nTab]->IsScenario(); nTab++ ) { if ( pTab[nTab]->IsActiveScenario() ) // auch wenn's dasselbe Szenario ist @@ -755,7 +756,7 @@ void ScDocument::MarkScenario( SCTAB nSrcTab, SCTAB nDestTab, ScMarkData& rDestM if (bResetMark) rDestMark.ResetMark(); - if (ValidTab(nSrcTab) && pTab[nSrcTab]) + if (ValidTab(nSrcTab) && nSrcTab < static_cast<SCTAB>(pTab.size()) && pTab[nSrcTab]) pTab[nSrcTab]->MarkScenarioIn( rDestMark, nNeededBits ); rDestMark.SetAreaTab( nDestTab ); @@ -763,12 +764,12 @@ void ScDocument::MarkScenario( SCTAB nSrcTab, SCTAB nDestTab, ScMarkData& rDestM sal_Bool ScDocument::HasScenarioRange( SCTAB nTab, const ScRange& rRange ) const { - return ValidTab(nTab) && pTab[nTab] && pTab[nTab]->HasScenarioRange( rRange ); + return ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] && pTab[nTab]->HasScenarioRange( rRange ); } const ScRangeList* ScDocument::GetScenarioRanges( SCTAB nTab ) const { - if (ValidTab(nTab) && pTab[nTab]) + if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) return pTab[nTab]->GetScenarioRanges(); return NULL; @@ -776,18 +777,19 @@ const ScRangeList* ScDocument::GetScenarioRanges( SCTAB nTab ) const sal_Bool ScDocument::IsActiveScenario( SCTAB nTab ) const { - return ValidTab(nTab) && pTab[nTab] && pTab[nTab]->IsActiveScenario( ); + return ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] && pTab[nTab]->IsActiveScenario( ); } void ScDocument::SetActiveScenario( SCTAB nTab, sal_Bool bActive ) { - if (ValidTab(nTab) && pTab[nTab]) + if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) pTab[nTab]->SetActiveScenario( bActive ); } sal_Bool ScDocument::TestCopyScenario( SCTAB nSrcTab, SCTAB nDestTab ) const { - if (ValidTab(nSrcTab) && ValidTab(nDestTab)) + if (ValidTab(nSrcTab) && nSrcTab < static_cast<SCTAB>(pTab.size()) + && nDestTab < static_cast<SCTAB>(pTab.size())&& ValidTab(nDestTab)) return pTab[nSrcTab]->TestCopyScenarioTo( pTab[nDestTab] ); OSL_FAIL("falsche Tabelle bei TestCopyScenario"); @@ -954,9 +956,9 @@ void ScDocument::UpdateReference( UpdateRefMode eUpdateRefMode, pUnoBroadcaster->Broadcast( ScUpdateRefHint( eUpdateRefMode, aRange, nDx, nDy, nDz ) ); i = 0; - iMax = MAXTAB; + iMax = static_cast<SCTAB>(pTab.size())-1; } - for ( ; i<=iMax; i++) + for ( ; i<=iMax && i < static_cast<SCTAB>(pTab.size()); i++) if (pTab[i]) pTab[i]->UpdateReference( eUpdateRefMode, nCol1, nRow1, nTab1, nCol2, nRow2, nTab2, @@ -1006,7 +1008,7 @@ void ScDocument::UpdateTranspose( const ScAddress& rDestPos, ScDocument* pClipDo ScAddress aDest = rDestPos; SCTAB nClipTab = 0; - for (SCTAB nDestTab=0; nDestTab<=MAXTAB && pTab[nDestTab]; nDestTab++) + for (SCTAB nDestTab=0; nDestTab< static_cast<SCTAB>(pTab.size()) && pTab[nDestTab]; nDestTab++) if (rMark.GetTableSelect(nDestTab)) { while (!pClipDoc->pTab[nClipTab]) nClipTab = (nClipTab+1) % (MAXTAB+1); @@ -1017,7 +1019,7 @@ void ScDocument::UpdateTranspose( const ScAddress& rDestPos, ScDocument* pClipDo // wie UpdateReference if (pRangeName) pRangeName->UpdateTranspose( aSource, aDest ); // vor den Zellen! - for (SCTAB i=0; i<=MAXTAB; i++) + for (SCTAB i=0; i< static_cast<SCTAB>(pTab.size()); i++) if (pTab[i]) pTab[i]->UpdateTranspose( aSource, aDest, pUndoDoc ); @@ -1034,7 +1036,7 @@ void ScDocument::UpdateGrow( const ScRange& rArea, SCCOL nGrowX, SCROW nGrowY ) if (pRangeName) pRangeName->UpdateGrow( rArea, nGrowX, nGrowY ); - for (SCTAB i=0; i<=MAXTAB && pTab[i]; i++) + for (SCTAB i=0; i< static_cast<SCTAB>(pTab.size()) && pTab[i]; i++) pTab[i]->UpdateGrow( rArea, nGrowX, nGrowY ); } @@ -1044,7 +1046,7 @@ void ScDocument::Fill(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, const { PutInOrder( nCol1, nCol2 ); PutInOrder( nRow1, nRow2 ); - 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]->Fill(nCol1, nRow1, nCol2, nRow2, @@ -1055,7 +1057,7 @@ void ScDocument::Fill(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, const String ScDocument::GetAutoFillPreview( const ScRange& rSource, SCCOL nEndX, SCROW nEndY ) { SCTAB nTab = rSource.aStart.Tab(); - if (pTab[nTab]) + if (nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) return pTab[nTab]->GetAutoFillPreview( rSource, nEndX, nEndY ); return EMPTY_STRING; @@ -1066,7 +1068,7 @@ void ScDocument::AutoFormat( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SC { PutInOrder( nStartCol, nEndCol ); PutInOrder( nStartRow, nEndRow ); - 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]->AutoFormat( nStartCol, nStartRow, nEndCol, nEndRow, nFormatNo ); @@ -1075,7 +1077,7 @@ void ScDocument::AutoFormat( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SC void ScDocument::GetAutoFormatData(SCTAB nTab, SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, ScAutoFormatData& rData) { - if (VALIDTAB(nTab)) + if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size())) { if (pTab[nTab]) { @@ -1182,6 +1184,8 @@ sal_Bool ScDocument::SearchAndReplace(const SvxSearchItem& rSearchItem, rMark.MarkToMulti(); sal_Bool bFound = false; + if (rTab >= static_cast<SCTAB>(pTab.size())) + OSL_FAIL("table out of range"); if (VALIDTAB(rTab)) { SCCOL nCol; @@ -1191,7 +1195,7 @@ sal_Bool ScDocument::SearchAndReplace(const SvxSearchItem& rSearchItem, if ( nCommand == SVX_SEARCHCMD_FIND_ALL || nCommand == SVX_SEARCHCMD_REPLACE_ALL ) { - for (nTab = 0; nTab <= MAXTAB; nTab++) + for (nTab = 0; nTab < static_cast<SCTAB>(pTab.size()); nTab++) if (pTab[nTab]) { if (rMark.GetTableSelect(nTab)) @@ -1232,7 +1236,7 @@ sal_Bool ScDocument::SearchAndReplace(const SvxSearchItem& rSearchItem, } else { - for (nTab = rTab; (nTab <= MAXTAB) && !bFound; nTab++) + for (nTab = rTab; (nTab < static_cast<SCTAB>(pTab.size())) && !bFound; nTab++) if (pTab[nTab]) { if (rMark.GetTableSelect(nTab)) @@ -1260,7 +1264,7 @@ sal_Bool ScDocument::SearchAndReplace(const SvxSearchItem& rSearchItem, sal_Bool ScDocument::UpdateOutlineCol( SCCOL nStartCol, SCCOL nEndCol, SCTAB nTab, sal_Bool bShow ) { - if ( ValidTab(nTab) && pTab[nTab] ) + if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] ) return pTab[nTab]->UpdateOutlineCol( nStartCol, nEndCol, bShow ); OSL_FAIL("missing tab"); @@ -1269,7 +1273,7 @@ sal_Bool ScDocument::UpdateOutlineCol( SCCOL nStartCol, SCCOL nEndCol, SCTAB nTa sal_Bool ScDocument::UpdateOutlineRow( SCROW nStartRow, SCROW nEndRow, SCTAB nTab, sal_Bool bShow ) { - if ( ValidTab(nTab) && pTab[nTab] ) + if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] ) return pTab[nTab]->UpdateOutlineRow( nStartRow, nEndRow, bShow ); OSL_FAIL("missing tab"); @@ -1278,7 +1282,7 @@ sal_Bool ScDocument::UpdateOutlineRow( SCROW nStartRow, SCROW nEndRow, SCTAB nTa void ScDocument::Sort(SCTAB nTab, const ScSortParam& rSortParam, sal_Bool bKeepQuery) { - if ( ValidTab(nTab) && pTab[nTab] ) + if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] ) { sal_Bool bOldDisableIdle = IsIdleDisabled(); DisableIdle( sal_True ); @@ -1289,7 +1293,7 @@ void ScDocument::Sort(SCTAB nTab, const ScSortParam& rSortParam, sal_Bool bKeepQ SCSIZE ScDocument::Query(SCTAB nTab, const ScQueryParam& rQueryParam, sal_Bool bKeepSub) { - if ( ValidTab(nTab) && pTab[nTab] ) + if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] ) return pTab[nTab]->Query((ScQueryParam&)rQueryParam, bKeepSub); OSL_FAIL("missing tab"); @@ -1299,7 +1303,7 @@ SCSIZE ScDocument::Query(SCTAB nTab, const ScQueryParam& rQueryParam, sal_Bool b void ScDocument::GetUpperCellString(SCCOL nCol, SCROW nRow, SCTAB nTab, String& rStr) { - if ( ValidTab(nTab) && pTab[nTab] ) + if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] ) pTab[nTab]->GetUpperCellString( nCol, nRow, rStr ); else rStr.Erase(); @@ -1307,7 +1311,7 @@ void ScDocument::GetUpperCellString(SCCOL nCol, SCROW nRow, SCTAB nTab, String& sal_Bool ScDocument::CreateQueryParam(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, SCTAB nTab, ScQueryParam& rQueryParam) { - if ( ValidTab(nTab) && pTab[nTab] ) + if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] ) return pTab[nTab]->CreateQueryParam(nCol1, nRow1, nCol2, nRow2, rQueryParam); OSL_FAIL("missing tab"); @@ -1367,7 +1371,7 @@ sal_Bool ScDocument::HasRowHeader( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndC sal_Bool ScDocument::GetFilterEntries( SCCOL nCol, SCROW nRow, SCTAB nTab, bool bFilter, TypedScStrCollection& rStrings, bool& rHasDates) { - if ( ValidTab(nTab) && pTab[nTab] && pDBCollection ) + if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] && pDBCollection ) { ScDBData* pDBData = pDBCollection->GetDBAtCursor(nCol, nRow, nTab, false); //!?? if (pDBData) @@ -1425,7 +1429,7 @@ sal_Bool ScDocument::GetFilterEntries( sal_Bool ScDocument::GetFilterEntriesArea( SCCOL nCol, SCROW nStartRow, SCROW nEndRow, SCTAB nTab, TypedScStrCollection& rStrings, bool& rHasDates ) { - if ( ValidTab(nTab) && pTab[nTab] ) + if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] ) { pTab[nTab]->GetFilterEntries( nCol, nStartRow, nEndRow, rStrings, rHasDates ); return sal_True; @@ -1455,7 +1459,7 @@ sal_Bool ScDocument::GetDataEntries( SCCOL nCol, SCROW nRow, SCTAB nTab, } } - return ValidTab(nTab) && pTab[nTab] && pTab[nTab]->GetDataEntries( nCol, nRow, rStrings, bLimit ); + return ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] && pTab[nTab]->GetDataEntries( nCol, nRow, rStrings, bLimit ); } // @@ -1544,7 +1548,11 @@ void ScDocument::GetEmbedded( ScRange& rRange ) const Rectangle ScDocument::GetEmbeddedRect() const // 1/100 mm { Rectangle aRect; - ScTable* pTable = pTab[aEmbedRange.aStart.Tab()]; + ScTable* pTable = NULL; + if ( aEmbedRange.aStart.Tab() < static_cast<SCTAB>(pTab.size()) ) + pTable = pTab[aEmbedRange.aStart.Tab()]; + else + OSL_FAIL("table out of range"); if (!pTable) { OSL_FAIL("GetEmbeddedRect ohne Tabelle"); @@ -1632,7 +1640,11 @@ bool lcl_AddTwipsWhile( long & rTwips, long nStopTwips, SCROW & rPosY, SCROW nEn ScRange ScDocument::GetRange( SCTAB nTab, const Rectangle& rMMRect ) const { - ScTable* pTable = pTab[nTab]; + ScTable* pTable = NULL; + if (nTab < static_cast<SCTAB>(pTab.size())) + pTable = pTab[nTab]; + else + OSL_FAIL("table out of range"); if (!pTable) { OSL_FAIL("GetRange ohne Tabelle"); @@ -1766,7 +1778,11 @@ void lcl_SnapVer( ScTable* pTable, long& rVal, SCROW& rStartRow ) void ScDocument::SnapVisArea( Rectangle& rRect ) const { - ScTable* pTable = pTab[nVisibleTab]; + ScTable* pTable = NULL; + if (nVisibleTab < static_cast<SCTAB>(pTab.size())) + pTable = pTab[nVisibleTab]; + else + OSL_FAIL("table out of range"); if (!pTable) { OSL_FAIL("SetEmbedded ohne Tabelle"); @@ -1817,7 +1833,7 @@ sal_Bool ScDocument::IsDocEditable() const sal_Bool ScDocument::IsTabProtected( SCTAB nTab ) const { - if (VALIDTAB(nTab) && pTab[nTab]) + if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) return pTab[nTab]->IsProtected(); OSL_FAIL("Falsche Tabellennummer"); @@ -1826,7 +1842,7 @@ sal_Bool ScDocument::IsTabProtected( SCTAB nTab ) const ScTableProtection* ScDocument::GetTabProtection( SCTAB nTab ) const { - if (VALIDTAB(nTab) && pTab[nTab]) + if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) return pTab[nTab]->GetProtection(); return NULL; @@ -1834,7 +1850,7 @@ ScTableProtection* ScDocument::GetTabProtection( SCTAB nTab ) const void ScDocument::SetTabProtection(SCTAB nTab, const ScTableProtection* pProtect) { - if (!ValidTab(nTab)) + if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size())) return; pTab[nTab]->SetProtection(pProtect); @@ -1842,7 +1858,7 @@ void ScDocument::SetTabProtection(SCTAB nTab, const ScTableProtection* pProtect) void ScDocument::CopyTabProtection(SCTAB nTabSrc, SCTAB nTabDest) { - if (!ValidTab(nTabSrc) || !ValidTab(nTabDest)) + if (!ValidTab(nTabSrc) || nTabSrc >= static_cast<SCTAB>(pTab.size()) || nTabDest >= static_cast<SCTAB>(pTab.size()) || !ValidTab(nTabDest)) return; pTab[nTabDest]->SetProtection( pTab[nTabSrc]->GetProtection() ); @@ -1932,7 +1948,7 @@ void ScDocument::SetDrawDefaults() Rectangle ScDocument::GetMMRect( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, SCTAB nTab ) const { - if (!ValidTab(nTab) || !pTab[nTab]) + if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab]) { OSL_FAIL("GetMMRect: falsche Tabelle"); return Rectangle(0,0,0,0); @@ -2036,19 +2052,19 @@ void ScDocument::RemoveMerge( SCCOL nCol, SCROW nRow, SCTAB nTab ) void ScDocument::ExtendPrintArea( OutputDevice* pDev, SCTAB nTab, SCCOL nStartCol, SCROW nStartRow, SCCOL& rEndCol, SCROW nEndRow ) { - if ( ValidTab(nTab) && pTab[nTab] ) + if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] ) pTab[nTab]->ExtendPrintArea( pDev, nStartCol, nStartRow, rEndCol, nEndRow ); } void ScDocument::IncSizeRecalcLevel( SCTAB nTab ) { - if ( ValidTab(nTab) && pTab[nTab] ) + if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] ) pTab[nTab]->IncRecalcLevel(); } void ScDocument::DecSizeRecalcLevel( SCTAB nTab, bool bUpdateNoteCaptionPos ) { - if ( ValidTab(nTab) && pTab[nTab] ) + if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] ) pTab[nTab]->DecRecalcLevel( bUpdateNoteCaptionPos ); } diff --git a/sc/source/core/data/documen4.cxx b/sc/source/core/data/documen4.cxx index b9c79e1c9ebf..aa6fccb6c60d 100644 --- a/sc/source/core/data/documen4.cxx +++ b/sc/source/core/data/documen4.cxx @@ -62,7 +62,7 @@ using namespace formula; // ----------------------------------------------------------------------- // Nach der Regula Falsi Methode -sal_Bool ScDocument::Solver(SCCOL nFCol, SCROW nFRow, SCTAB nFTab, +sal_Bool ScDocument::Solver(SCCOL nFCol, SCROW nFRow, SCTAB nFTab,//TODO:REWORK SCCOL nVCol, SCROW nVRow, SCTAB nVTab, const String& sValStr, double& nX) { @@ -135,16 +135,17 @@ void ScDocument::InsertMatrixFormula(SCCOL nCol1, SCROW nRow1, SCCOL j; SCROW k; i = 0; - sal_Bool bStop = false; - while (i <= MAXTAB && !bStop) // erste markierte Tabelle finden + bool bStop = false; + for (;i < static_cast<SCTAB>(pTab.size()); ++i) { if (pTab[i] && rMark.GetTableSelect(i)) - bStop = sal_True; - else - i++; + { + bStop = true; + break; + } } nTab1 = i; - if (i == MAXTAB + 1) + if (!bStop) { Sound::Beep(); OSL_FAIL("ScDocument::InsertMatrixFormula Keine Tabelle markiert"); @@ -158,7 +159,7 @@ void ScDocument::InsertMatrixFormula(SCCOL nCol1, SCROW nRow1, else pCell = new ScFormulaCell( this, aPos, rFormula, eGram, MM_FORMULA ); pCell->SetMatColsRows( nCol2 - nCol1 + 1, nRow2 - nRow1 + 1 ); - for (i = 0; i <= MAXTAB; i++) + for (i = 0; i < static_cast<SCTAB>(pTab.size()); i++) { if (pTab[i] && rMark.GetTableSelect(i)) { @@ -182,7 +183,7 @@ void ScDocument::InsertMatrixFormula(SCCOL nCol1, SCROW nRow1, ScTokenArray aArr; ScToken* t = static_cast<ScToken*>(aArr.AddMatrixSingleReference( aRefData)); - for (i = 0; i <= MAXTAB; i++) + for (i = 0; i < static_cast<SCTAB>(pTab.size()); i++) { if (pTab[i] && rMark.GetTableSelect(i)) { @@ -222,16 +223,17 @@ void ScDocument::InsertTableOp(const ScTabOpParam& rParam, // Mehrfachopera SCCOL j; SCROW k; i = 0; - sal_Bool bStop = false; - while (i <= MAXTAB && !bStop) // erste markierte Tabelle finden + bool bStop = false; + for (;i < static_cast<SCTAB>(pTab.size()); ++i) { if (pTab[i] && rMark.GetTableSelect(i)) - bStop = sal_True; - else - i++; + { + bStop = true; + break; + } } nTab1 = i; - if (i == MAXTAB + 1) + if (!bStop) { Sound::Beep(); OSL_FAIL("ScDocument::InsertTableOp: Keine Tabelle markiert"); @@ -291,7 +293,7 @@ void ScDocument::InsertTableOp(const ScTabOpParam& rParam, // Mehrfachopera formula::FormulaGrammar::GRAM_NATIVE, MM_NONE ); for( j = nCol1; j <= nCol2; j++ ) for( k = nRow1; k <= nRow2; k++ ) - for (i = 0; i <= MAXTAB; i++) + for (i = 0; i < static_cast<SCTAB>(pTab.size()); i++) if( pTab[i] && rMark.GetTableSelect(i) ) pTab[i]->PutCell( j, k, aRefCell.CloneWithoutNote( *this, ScAddress( j, k, i ), SC_CLONECELL_STARTLISTENING ) ); } @@ -370,7 +372,7 @@ bool ScDocument::MarkUsedExternalReferences( ScTokenArray & rArr ) sal_Bool ScDocument::GetNextSpellingCell(SCCOL& nCol, SCROW& nRow, SCTAB nTab, sal_Bool bInSel, const ScMarkData& rMark) const { - if (ValidTab(nTab) && pTab[nTab]) + if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) return pTab[nTab]->GetNextSpellingCell( nCol, nRow, bInSel, rMark ); else return false; @@ -379,7 +381,7 @@ sal_Bool ScDocument::GetNextSpellingCell(SCCOL& nCol, SCROW& nRow, SCTAB nTab, sal_Bool ScDocument::GetNextMarkedCell( SCCOL& rCol, SCROW& rRow, SCTAB nTab, const ScMarkData& rMark ) { - if (ValidTab(nTab) && pTab[nTab]) + if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) return pTab[nTab]->GetNextMarkedCell( rCol, rRow, rMark ); else return false; @@ -390,7 +392,7 @@ sal_Bool ScDocument::ReplaceStyle(const SvxSearchItem& rSearchItem, ScMarkData& rMark, sal_Bool bIsUndoP) { - if (pTab[nTab]) + if (nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) return pTab[nTab]->ReplaceStyle(rSearchItem, nCol, nRow, rMark, bIsUndoP); else return false; @@ -398,7 +400,7 @@ sal_Bool ScDocument::ReplaceStyle(const SvxSearchItem& rSearchItem, void ScDocument::CompileDBFormula() { - for (SCTAB i=0; i<=MAXTAB; i++) + for (SCTAB i=0; i< static_cast<SCTAB>(pTab.size()); i++) { if (pTab[i]) pTab[i]->CompileDBFormula(); } @@ -406,7 +408,7 @@ void ScDocument::CompileDBFormula() void ScDocument::CompileDBFormula( sal_Bool bCreateFormulaString ) { - for (SCTAB i=0; i<=MAXTAB; i++) + for (SCTAB i=0; i< static_cast<SCTAB>(pTab.size()); i++) { if (pTab[i]) pTab[i]->CompileDBFormula( bCreateFormulaString ); } @@ -417,7 +419,7 @@ void ScDocument::CompileNameFormula( sal_Bool bCreateFormulaString ) if ( pCondFormList ) pCondFormList->CompileAll(); // nach ScNameDlg noetig - for (SCTAB i=0; i<=MAXTAB; i++) + for (SCTAB i=0; i< static_cast<SCTAB>(pTab.size()); i++) { if (pTab[i]) pTab[i]->CompileNameFormula( bCreateFormulaString ); } @@ -425,7 +427,7 @@ void ScDocument::CompileNameFormula( sal_Bool bCreateFormulaString ) void ScDocument::CompileColRowNameFormula() { - for (SCTAB i=0; i<=MAXTAB; i++) + for (SCTAB i=0; i< static_cast<SCTAB>(pTab.size()); i++) { if (pTab[i]) pTab[i]->CompileColRowNameFormula(); } @@ -433,7 +435,7 @@ void ScDocument::CompileColRowNameFormula() void ScDocument::DoColResize( SCTAB nTab, SCCOL nCol1, SCCOL nCol2, SCSIZE nAdd ) { - if (ValidTab(nTab) && pTab[nTab]) + if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) pTab[nTab]->DoColResize( nCol1, nCol2, nAdd ); else { @@ -443,7 +445,7 @@ void ScDocument::DoColResize( SCTAB nTab, SCCOL nCol1, SCCOL nCol2, SCSIZE nAdd void ScDocument::InvalidateTableArea() { - for (SCTAB nTab=0; nTab<=MAXTAB && pTab[nTab]; nTab++) + for (SCTAB nTab=0; nTab< static_cast<SCTAB>(pTab.size()) && pTab[nTab]; nTab++) { pTab[nTab]->InvalidateTableArea(); if ( pTab[nTab]->IsScenario() ) @@ -454,7 +456,7 @@ void ScDocument::InvalidateTableArea() sal_Int32 ScDocument::GetMaxStringLen( SCTAB nTab, SCCOL nCol, SCROW nRowStart, SCROW nRowEnd, CharSet eCharSet ) const { - if (ValidTab(nTab) && pTab[nTab]) + if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) return pTab[nTab]->GetMaxStringLen( nCol, nRowStart, nRowEnd, eCharSet ); else return 0; @@ -464,7 +466,7 @@ xub_StrLen ScDocument::GetMaxNumberStringLen( sal_uInt16& nPrecision, SCTAB nTab SCCOL nCol, SCROW nRowStart, SCROW nRowEnd ) const { - if (ValidTab(nTab) && pTab[nTab]) + if (ValidTab(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) return pTab[nTab]->GetMaxNumberStringLen( nPrecision, nCol, nRowStart, nRowEnd ); else @@ -486,7 +488,7 @@ sal_Bool ScDocument::GetSelectionFunction( ScSubTotalFunc eFunc, SCCOL nEndCol = aSingle.aEnd.Col(); SCROW nEndRow = aSingle.aEnd.Row(); - for (SCTAB nTab=0; nTab<=MAXTAB && !aData.bError; nTab++) + for (SCTAB nTab=0; nTab< static_cast<SCTAB>(pTab.size()) && !aData.bError; nTab++) if (pTab[nTab] && rMark.GetTableSelect(nTab)) pTab[nTab]->UpdateSelectionFunction( aData, nStartCol, nStartRow, nEndCol, nEndRow, rMark ); @@ -712,13 +714,13 @@ const ScValidationData* ScDocument::GetValidationEntry( sal_uLong nIndex ) const void ScDocument::FindConditionalFormat( sal_uLong nKey, ScRangeList& rRanges ) { - for (SCTAB i=0; i<=MAXTAB && pTab[i]; i++) + for (SCTAB i=0; i< static_cast<SCTAB>(pTab.size()) && pTab[i]; i++) pTab[i]->FindConditionalFormat( nKey, rRanges ); } void ScDocument::FindConditionalFormat( sal_uLong nKey, ScRangeList& rRanges, SCTAB nTab ) { - if(VALIDTAB(nTab) && pTab[nTab]) + if(VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) pTab[nTab]->FindConditionalFormat( nKey, rRanges ); } @@ -960,7 +962,7 @@ void ScDocument::FindOrder( SCCOLROW* pOtherRows, SCCOLROW nThisEndRow, SCCOLROW } } -void ScDocument::CompareDocument( ScDocument& rOtherDoc ) +void ScDocument::CompareDocument( ScDocument& rOtherDoc )//TODO:REWORK { if (!pChangeTrack) return; diff --git a/sc/source/core/data/documen5.cxx b/sc/source/core/data/documen5.cxx index a737a5966764..fa8579ff3970 100644 --- a/sc/source/core/data/documen5.cxx +++ b/sc/source/core/data/documen5.cxx @@ -136,7 +136,7 @@ void ScDocument::UpdateAllCharts() sal_uInt16 nPos; - for (SCTAB nTab=0; nTab<=MAXTAB; nTab++) + for (SCTAB nTab=0; nTab< static_cast<SCTAB>(pTab.size()); nTab++) { if (pTab[nTab]) { @@ -206,9 +206,9 @@ void ScDocument::UpdateAllCharts() sal_Bool ScDocument::HasChartAtPoint( SCTAB nTab, const Point& rPos, String* pName ) { - if (pDrawLayer && pTab[nTab]) + if (pDrawLayer && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) { - SdrPage* pPage = pDrawLayer->GetPage(static_cast<sal_uInt16>(nTab)); + SdrPage* pPage = pDrawLayer->GetPage(static_cast<sal_uInt16>(nTab));//TODO:REWORK DBG_ASSERT(pPage,"Page ?"); SdrObjListIter aIter( *pPage, IM_DEEPNOGROUPS ); @@ -252,7 +252,7 @@ uno::Reference< chart2::XChartDocument > ScDocument::GetChartByName( const Strin if (pDrawLayer) { sal_uInt16 nCount = pDrawLayer->GetPageCount(); - for (sal_uInt16 nTab=0; nTab<nCount; nTab++) + for (sal_uInt16 nTab=0; nTab<nCount&& nTab < static_cast<SCTAB>(pTab.size()); nTab++) { SdrPage* pPage = pDrawLayer->GetPage(nTab); DBG_ASSERT(pPage,"Page ?"); @@ -317,7 +317,7 @@ void ScDocument::GetOldChartParameters( const String& rName, return; sal_uInt16 nCount = pDrawLayer->GetPageCount(); - for (sal_uInt16 nTab=0; nTab<nCount; nTab++) + for (sal_uInt16 nTab=0; nTab<nCount && nTab < static_cast<SCTAB>(pTab.size()); nTab++) { SdrPage* pPage = pDrawLayer->GetPage(nTab); DBG_ASSERT(pPage,"Page ?"); @@ -364,7 +364,7 @@ void ScDocument::UpdateChartArea( const String& rChartName, if (!pDrawLayer) return; - for (SCTAB nTab=0; nTab<=MAXTAB && pTab[nTab]; nTab++) + for (SCTAB nTab=0; nTab< static_cast<SCTAB>(pTab.size()) && pTab[nTab]; nTab++) { SdrPage* pPage = pDrawLayer->GetPage(static_cast<sal_uInt16>(nTab)); DBG_ASSERT(pPage,"Page ?"); @@ -599,7 +599,7 @@ void ScDocument::SetChartRangeList( const String& rChartName, if (!pDrawLayer) return; - for (SCTAB nTab=0; nTab<=MAXTAB && pTab[nTab]; nTab++) + for (SCTAB nTab=0; nTab< static_cast<SCTAB>(pTab.size()) && pTab[nTab]; nTab++) { SdrPage* pPage = pDrawLayer->GetPage(static_cast<sal_uInt16>(nTab)); DBG_ASSERT(pPage,"Page ?"); @@ -639,7 +639,7 @@ void ScDocument::SetChartRangeList( const String& rChartName, sal_Bool ScDocument::HasData( SCCOL nCol, SCROW nRow, SCTAB nTab ) { - if (pTab[nTab]) + if (nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) return pTab[nTab]->HasData( nCol, nRow ); else return false; @@ -701,7 +701,7 @@ void ScDocument::UpdateChartListenerCollection() ScRange aRange; // Range for searching is not important ScChartListener aCLSearcher( EMPTY_STRING, this, aRange ); - for (SCTAB nTab=0; nTab<=MAXTAB; nTab++) + for (SCTAB nTab=0; nTab< static_cast<SCTAB>(pTab.size()); nTab++) { if (pTab[nTab]) { diff --git a/sc/source/core/data/documen7.cxx b/sc/source/core/data/documen7.cxx index 3bbfde5b31a1..c7d3796c89be 100644 --- a/sc/source/core/data/documen7.cxx +++ b/sc/source/core/data/documen7.cxx @@ -116,7 +116,7 @@ void ScDocument::Broadcast( const ScHint& rHint ) if ( rHint.GetAddress() != BCA_BRDCST_ALWAYS ) { SCTAB nTab = rHint.GetAddress().Tab(); - if (pTab[nTab] && pTab[nTab]->IsStreamValid()) + if (nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] && pTab[nTab]->IsStreamValid()) pTab[nTab]->SetStreamValid(false); } } @@ -193,7 +193,7 @@ void ScDocument::StartListeningCell( const ScAddress& rAddress, { DBG_ASSERT(pListener, "StartListeningCell: pListener Null"); SCTAB nTab = rAddress.Tab(); - if (pTab[nTab]) + if (nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) pTab[nTab]->StartListening( rAddress, pListener ); } @@ -202,7 +202,7 @@ void ScDocument::EndListeningCell( const ScAddress& rAddress, { DBG_ASSERT(pListener, "EndListeningCell: pListener Null"); SCTAB nTab = rAddress.Tab(); - if (pTab[nTab]) + if (nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) pTab[nTab]->EndListening( rAddress, pListener ); } @@ -488,7 +488,7 @@ void ScDocument::TrackFormulas( sal_uLong nHintId ) void ScDocument::StartAllListeners() { - for ( SCTAB i = 0; i <= MAXTAB; ++i ) + for ( SCTAB i = 0; i < static_cast<SCTAB>(pTab.size()); ++i ) if ( pTab[i] ) pTab[i]->StartAllListeners(); } diff --git a/sc/source/core/data/documen8.cxx b/sc/source/core/data/documen8.cxx index cec0c0c45ca0..1c48fa65e47e 100644 --- a/sc/source/core/data/documen8.cxx +++ b/sc/source/core/data/documen8.cxx @@ -429,7 +429,7 @@ void ScDocument::InvalidateTextWidth( const ScAddress* pAdrFrom, const ScAddress { const SCTAB nTab = pAdrFrom->Tab(); - if ( pTab[nTab] ) + if (nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab] ) pTab[nTab]->InvalidateTextWidth( pAdrFrom, NULL, bNumFormatChanged, bBroadcast ); } else @@ -437,7 +437,7 @@ void ScDocument::InvalidateTextWidth( const ScAddress* pAdrFrom, const ScAddress const SCTAB nTabStart = pAdrFrom ? pAdrFrom->Tab() : 0; const SCTAB nTabEnd = pAdrTo ? pAdrTo->Tab() : MAXTAB; - for ( SCTAB nTab=nTabStart; nTab<=nTabEnd; nTab++ ) + for ( SCTAB nTab=nTabStart; nTab<=nTabEnd && nTab < static_cast<SCTAB>(pTab.size()); nTab++ ) if ( pTab[nTab] ) pTab[nTab]->InvalidateTextWidth( pAdrFrom, pAdrTo, bNumFormatChanged, bBroadcast ); } @@ -472,7 +472,7 @@ sal_Bool ScDocument::IdleCalcTextWidth() // sal_True = demnaechst wie nRow = 0, nCol--; if ( nCol < 0 ) nCol = MAXCOL, nTab++; - if ( !ValidTab(nTab) || !pTab[nTab] ) + if ( !ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab] ) nTab = 0; // SearchMask/Family muss gemerkt werden, @@ -551,7 +551,7 @@ sal_Bool ScDocument::IdleCalcTextWidth() // sal_True = demnaechst wie bNewTab = sal_True; } - if ( !ValidTab(nTab) || !pTab[nTab] ) + if ( !ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab] ) { nTab = 0; nRestart++; @@ -671,11 +671,11 @@ sal_Bool ScDocument::OnlineSpellInRange( const ScRange& rSpellRange, ScAddress& SCCOL nCol = rSpellRange.aStart.Col(); // iterator always starts on the left edge SCROW nRow = rSpellPos.Row(); SCTAB nTab = rSpellPos.Tab(); - if ( !pTab[nTab] ) // sheet deleted? + if ( nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab] ) // sheet deleted? { nTab = rSpellRange.aStart.Tab(); nRow = rSpellRange.aStart.Row(); - if ( !pTab[nTab] ) + if ( nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab] ) { // may happen for visible range return false; @@ -796,7 +796,7 @@ sal_Bool ScDocument::OnlineSpellInRange( const ScRange& rSpellRange, ScAddress& if (!pCell) // end of range reached -> next sheet { ++nTab; - if ( nTab > rSpellRange.aEnd.Tab() || !pTab[nTab] ) + if ( nTab > rSpellRange.aEnd.Tab() || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab] ) nTab = rSpellRange.aStart.Tab(); nCol = rSpellRange.aStart.Col(); nRow = rSpellRange.aStart.Row(); @@ -888,7 +888,7 @@ void ScDocument::RemoveAutoSpellObj() { // alle Spelling-Informationen entfernen - for (SCTAB nTab=0; nTab<=MAXTAB && pTab[nTab]; nTab++) + for (SCTAB nTab=0; nTab< static_cast<SCTAB>(pTab.size()) && pTab[nTab]; nTab++) pTab[nTab]->RemoveAutoSpellObj(); } diff --git a/sc/source/core/data/documen9.cxx b/sc/source/core/data/documen9.cxx index b8ba53f22d4d..9e5e7e705448 100644 --- a/sc/source/core/data/documen9.cxx +++ b/sc/source/core/data/documen9.cxx @@ -154,14 +154,14 @@ void ScDocument::InitDrawLayer( SfxObjectShell* pDocShell ) SCTAB nDrawPages = 0; SCTAB nTab; - for (nTab=0; nTab<=MAXTAB; nTab++) + for (nTab=0; nTab< static_cast<SCTAB>(pTab.size()); nTab++) if (pTab[nTab]) nDrawPages = nTab + 1; // needed number of pages for (nTab=0; nTab<nDrawPages; nTab++) { pDrawLayer->ScAddPage( nTab ); // always add page, with or without the table - if (pTab[nTab]) + if (nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) { String aTabName; pTab[nTab]->GetName(aTabName); @@ -219,7 +219,7 @@ void ScDocument::UpdateDrawPrinter() void ScDocument::SetDrawPageSize(SCTAB nTab) { - if (!ValidTab(nTab) || !pTab[nTab]) + if (!ValidTab(nTab) || nTab >= static_cast<SCTAB>(pTab.size()) || !pTab[nTab]) return; pTab[nTab]->SetDrawPageSize(); @@ -276,7 +276,7 @@ void ScDocument::DeleteObjectsInArea( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCR return; SCTAB nTabCount = GetTableCount(); - for (SCTAB nTab=0; nTab<=nTabCount; nTab++) + for (SCTAB nTab=0; nTab<nTabCount; nTab++) if (pTab[nTab] && rMark.GetTableSelect(nTab)) pDrawLayer->DeleteObjectsInArea( nTab, nCol1, nRow1, nCol2, nRow2 ); } @@ -297,7 +297,7 @@ sal_Bool ScDocument::HasOLEObjectsInArea( const ScRange& rRange, const ScMarkDat return false; SCTAB nStartTab = 0; - SCTAB nEndTab = MAXTAB; + SCTAB nEndTab = static_cast<SCTAB>(pTab.size()); if ( !pTabMark ) { nStartTab = rRange.aStart.Tab(); @@ -426,7 +426,7 @@ SdrObject* ScDocument::GetObjectAtPoint( SCTAB nTab, const Point& rPos ) // fuer Drag&Drop auf Zeichenobjekt SdrObject* pFound = NULL; - if (pDrawLayer && pTab[nTab]) + if (pDrawLayer && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) { SdrPage* pPage = pDrawLayer->GetPage(static_cast<sal_uInt16>(nTab)); DBG_ASSERT(pPage,"Page ?"); @@ -526,12 +526,7 @@ sal_Bool ScDocument::IsPrintEmpty( SCTAB nTab, SCCOL nStartCol, SCROW nStartRow, void ScDocument::Clear( sal_Bool bFromDestructor ) { - for (SCTAB i=0; i<=MAXTAB; i++) - if (pTab[i]) - { - delete pTab[i]; - pTab[i]=NULL; - } + pTab.clear(); delete pSelectionAttr; pSelectionAttr = NULL; @@ -679,7 +674,7 @@ bool ScDocument::IsLoadingMedium() const void ScDocument::SetLoadingMedium( bool bVal ) { bLoadingMedium = bVal; - for (SCTAB nTab = 0; nTab <= MAXTAB; ++nTab) + for (SCTAB nTab = 0; nTab < static_cast<SCTAB>(pTab.size()); ++nTab) { if (!pTab[nTab]) return; @@ -698,7 +693,7 @@ void ScDocument::SetImportingXML( bool bVal ) { // #i57869# after loading, do the real RTL mirroring for the sheets that have the LoadingRTL flag set - for ( SCTAB nTab=0; nTab<=MAXTAB && pTab[nTab]; nTab++ ) + for ( SCTAB nTab=0; nTab< static_cast<SCTAB>(pTab.size()) && pTab[nTab]; nTab++ ) if ( pTab[nTab]->IsLoadingRTL() ) { pTab[nTab]->SetLoadingRTL( false ); diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx index f7db286e18ef..a2e4a60aa059 100644 --- a/sc/source/core/data/document.cxx +++ b/sc/source/core/data/document.cxx @@ -138,7 +138,7 @@ typedef std::set<ScDefaultAttr, ScLessDefaultAttr> ScDefaultAttrSet; void ScDocument::MakeTable( SCTAB nTab,bool _bNeedsNameCheck ) { - if ( ValidTab(nTab) && ( nTab < static_cast<SCTAB>(pTab.size()) ||!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); @@ -227,14 +227,14 @@ sal_Bool ScDocument::GetTable( const String& rName, SCTAB& rTab ) const ScDBData* ScDocument::GetAnonymousDBData(SCTAB nTab) { - if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size())) + if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) return pTab[nTab]->GetAnonymousDBData(); return NULL; } void ScDocument::SetAnonymousDBData(SCTAB nTab, ScDBData* pDBData) { - if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size())) + if (VALIDTAB(nTab) && nTab < static_cast<SCTAB>(pTab.size()) && pTab[nTab]) pTab[nTab]->SetAnonymousDBData(pDBData); } |