[Libreoffice-commits] .: Branch 'feature/unlimited-number-of-sheets' - 2 commits - sc/inc sc/source
Markus Mohrhard
mmohrhard at kemper.freedesktop.org
Mon May 16 16:39:08 PDT 2011
sc/inc/document.hxx | 6 -
sc/source/core/data/documen2.cxx | 32 +++----
sc/source/core/data/documen3.cxx | 166 +++++++++++++++++++++------------------
sc/source/core/data/documen4.cxx | 64 +++++++--------
sc/source/core/data/documen5.cxx | 18 ++--
sc/source/core/data/documen7.cxx | 8 -
sc/source/core/data/documen8.cxx | 16 +--
sc/source/core/data/documen9.cxx | 23 ++---
sc/source/core/data/document.cxx | 6 -
9 files changed, 176 insertions(+), 163 deletions(-)
New commits:
commit 80de68534947104ec4b585e1e8af08abc1102e99
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Tue May 17 01:37:48 2011 +0200
rework most of the ScDocument methods
it compiles and the unit test does not fail
diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index 5b1ebcd..32af539 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 4c2ee34..b8a5f81 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 17d5bd9..d5fd429 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 85dc636..42ceef9 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 59b84eb..f07fdd3 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 89be732..88955a4 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 7820315..ac4c482 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 wieder versu
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 wieder versu
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 3d58b87..a5a853d 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 50e6ab4..9f28517 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);
}
commit 114b965d38e3a676738ee20014861b16b2c6028f
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Mon May 16 23:21:30 2011 +0200
use typedef not at iterator but at container type
diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index 1b0e303..5b1ebcd 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -186,7 +186,7 @@ namespace com { namespace sun { namespace star {
#define SC_ASIANCOMPRESSION_INVALID 0xff
#define SC_ASIANKERNING_INVALID 0xff
-typedef ::std::vector<ScTable*>::iterator ScTableIterator;
+typedef ::std::vector<ScTable*> TableContainer;
enum ScDocumentMode
{
diff --git a/sc/source/core/data/documen2.cxx b/sc/source/core/data/documen2.cxx
index db7a76d..4c2ee34 100644
--- a/sc/source/core/data/documen2.cxx
+++ b/sc/source/core/data/documen2.cxx
@@ -846,7 +846,7 @@ sal_Bool ScDocument::CopyTab( SCTAB nOldPos, SCTAB nNewPos, const ScMarkData* pO
SetAutoCalc( false ); // Mehrfachberechnungen vermeiden
if (bValid)
{
- if (nNewPos == pTab.size())
+ if (nNewPos >= pTab.size())
{
pTab.push_back( new ScTable(this, nMaxTableNumber, aName) );
}
@@ -873,7 +873,7 @@ sal_Bool ScDocument::CopyTab( SCTAB nOldPos, SCTAB nNewPos, const ScMarkData* pO
pUnoBroadcaster->Broadcast( ScUpdateRefHint( URM_INSDEL, aRange, 0,0,1 ) );
SCTAB i;
- for (ScTableIterator it = pTab.begin(); it != pTab.end(); ++it)
+ 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--)
@@ -882,11 +882,11 @@ sal_Bool ScDocument::CopyTab( SCTAB nOldPos, SCTAB nNewPos, const ScMarkData* pO
nOldPos++;
pTab[nNewPos] = new ScTable(this, nNewPos, aName);
bValid = sal_True;
- for (ScTableIterator it = pTab.begin(); it != pTab.end(); ++it)
+ for (TableContainer::iterator it = pTab.begin(); it != pTab.end(); ++it)
if (*it && it != pTab.begin()+nOldPos && it != pTab.begin() + nNewPos)
(*it)->UpdateCompile();
SetNoListening( false );
- for (ScTableIterator it = pTab.begin(); it != pTab.end(); ++it)
+ for (TableContainer::iterator it = pTab.begin(); it != pTab.end(); ++it)
if (*it && it != pTab.begin()+nOldPos && it != pTab.begin()+nNewPos)
(*it)->StartAllListeners();
More information about the Libreoffice-commits
mailing list