summaryrefslogtreecommitdiff
path: root/sc/source/ui/docshell
diff options
context:
space:
mode:
Diffstat (limited to 'sc/source/ui/docshell')
-rw-r--r--sc/source/ui/docshell/dbdocfun.cxx4
-rw-r--r--sc/source/ui/docshell/docsh5.cxx404
2 files changed, 143 insertions, 265 deletions
diff --git a/sc/source/ui/docshell/dbdocfun.cxx b/sc/source/ui/docshell/dbdocfun.cxx
index 40be175302be..0b97c5820bf8 100644
--- a/sc/source/ui/docshell/dbdocfun.cxx
+++ b/sc/source/ui/docshell/dbdocfun.cxx
@@ -592,7 +592,7 @@ sal_Bool ScDBDocFunc::Sort( SCTAB nTab, const ScSortParam& rSortParam,
if (pDestData)
pNewData = pDestData; // Bereich vorhanden -> anpassen
else // Bereich ab Cursor/Markierung wird angelegt
- pNewData = rDocShell.GetDBData(aDestPos, SC_DB_MAKE_SORT, SC_DBSEL_FORCE_MARK );
+ pNewData = rDocShell.GetDBData(aDestPos, SC_DB_MAKE, SC_DBSEL_FORCE_MARK );
if (pNewData)
{
pNewData->SetArea( nTab,
@@ -919,7 +919,7 @@ sal_Bool ScDBDocFunc::Query( SCTAB nTab, const ScQueryParam& rQueryParam,
pNewData = rDocShell.GetDBData(
ScRange( aLocalParam.nCol1, aLocalParam.nRow1, nDestTab,
aLocalParam.nCol2, aLocalParam.nRow2, nDestTab ),
- SC_DB_MAKE_FILTER, SC_DBSEL_FORCE_MARK );
+ SC_DB_MAKE, SC_DBSEL_FORCE_MARK );
if (pNewData)
{
diff --git a/sc/source/ui/docshell/docsh5.cxx b/sc/source/ui/docshell/docsh5.cxx
index 52d3c23d51e6..6f2129b0377a 100644
--- a/sc/source/ui/docshell/docsh5.cxx
+++ b/sc/source/ui/docshell/docsh5.cxx
@@ -111,17 +111,21 @@ void ScDocShell::DBAreaDeleted( SCTAB nTab, SCCOL nX1, SCROW nY1, SCCOL nX2, SCR
aDocument.BroadcastUno( SfxSimpleHint( SFX_HINT_DATACHANGED ) );
}
-ScDBData* lcl_GetDBNearCursor( ScDBCollection* pColl, SCCOL nCol, SCROW nRow, SCTAB nTab )
+
+ScDBData* lcl_GetDBNearCursor(
+ const ScDBCollection* pColl,
+ const SCCOL nCol,
+ const SCROW nRow,
+ const SCTAB nTab )
{
//! nach document/dbcolect verschieben
if (!pColl)
return NULL;
- ScDBData* pNoNameData = NULL;
+ ScDBData* pInternalDBData = NULL;
ScDBData* pNearData = NULL;
sal_uInt16 nCount = pColl->GetCount();
- String aNoName = ScGlobal::GetRscString( STR_DB_NONAME );
SCTAB nAreaTab;
SCCOL nStartCol, nEndCol;
SCROW nStartRow, nEndRow;
@@ -129,14 +133,20 @@ ScDBData* lcl_GetDBNearCursor( ScDBCollection* pColl, SCCOL nCol, SCROW nRow, SC
{
ScDBData* pDB = (*pColl)[i];
pDB->GetArea( nAreaTab, nStartCol, nStartRow, nEndCol, nEndRow );
- if ( nTab == nAreaTab && nCol+1 >= nStartCol && nCol <= nEndCol+1 &&
- nRow+1 >= nStartRow && nRow <= nEndRow+1 )
+ if ( nTab == nAreaTab
+ && nCol+1 >= nStartCol
+ && nCol <= nEndCol+1
+ && nRow+1 >= nStartRow
+ && nRow <= nEndRow+1 )
{
- if ( pDB->GetName() == aNoName )
- pNoNameData = pDB;
+ if ( pDB->IsInternalUnnamed()
+ || pDB->IsInternalForAutoFilter() )
+ {
+ pInternalDBData = pDB;
+ }
else if ( nCol < nStartCol || nCol > nEndCol || nRow < nStartRow || nRow > nEndRow )
{
- if (!pNearData)
+ if ( !pNearData )
pNearData = pDB; // ersten angrenzenden Bereich merken
}
else
@@ -145,60 +155,57 @@ ScDBData* lcl_GetDBNearCursor( ScDBCollection* pColl, SCCOL nCol, SCROW nRow, SC
}
if (pNearData)
return pNearData; // angrenzender, wenn nichts direkt getroffen
- return pNoNameData; // "unbenannt" nur zurueck, wenn sonst nichts gefunden
+ return pInternalDBData;
}
ScDBData* ScDocShell::GetDBData( const ScRange& rMarked, ScGetDBMode eMode, ScGetDBSelection eSel )
{
- if ( eMode == SC_DB_MAKE_FILTER || eMode == SC_DB_MAKE_SORT || eMode == SC_DB_MAKE_SUBTOTAL || eMode == SC_DB_OLD_FILTER )
- return GetDBDataAdd(rMarked, eMode, eSel);
- SCCOL nCol = rMarked.aStart.Col();
- SCROW nRow = rMarked.aStart.Row();
- SCTAB nTab = rMarked.aStart.Tab();
+ const SCCOL nCol = rMarked.aStart.Col();
+ const SCROW nRow = rMarked.aStart.Row();
+ const SCTAB nTab = rMarked.aStart.Tab();
SCCOL nStartCol = nCol;
SCROW nStartRow = nRow;
- SCTAB nStartTab = nTab;
SCCOL nEndCol = rMarked.aEnd.Col();
SCROW nEndRow = rMarked.aEnd.Row();
- SCTAB nEndTab = rMarked.aEnd.Tab();
-
- // Wegen #49655# nicht einfach GetDBAtCursor: Der zusammenhaengende Datenbereich
- // fuer "unbenannt" (GetDataArea) kann neben dem Cursor legen, also muss auch ein
- // benannter DB-Bereich dort gesucht werden.
- ScDBData* pData = aDocument.GetDBAtArea( nTab, nStartCol, nStartRow, nEndCol, nEndRow );
- if (!pData)
- pData = lcl_GetDBNearCursor( aDocument.GetDBCollection(), nCol, nRow, nTab );
+ ScDBData* pFoundDBData = aDocument.GetDBAtArea( nTab, nStartCol, nStartRow, nEndCol, nEndRow );
+ if ( pFoundDBData == NULL )
+ {
+ pFoundDBData = lcl_GetDBNearCursor( aDocument.GetDBCollection(), nCol, nRow, nTab );
+ }
- sal_Bool bSelected = ( eSel == SC_DBSEL_FORCE_MARK ||
- (rMarked.aStart != rMarked.aEnd && eSel != SC_DBSEL_ROW_DOWN) );
- bool bOnlyDown = (!bSelected && eSel == SC_DBSEL_ROW_DOWN && rMarked.aStart.Row() == rMarked.aEnd.Row());
+ const bool bSelected =
+ ( eSel == SC_DBSEL_FORCE_MARK
+ || ( rMarked.aStart != rMarked.aEnd
+ && eSel != SC_DBSEL_ROW_DOWN ) );
+ const bool bOnlyDown = ( !bSelected
+ && eSel == SC_DBSEL_ROW_DOWN
+ && rMarked.aStart.Row() == rMarked.aEnd.Row());
- sal_Bool bUseThis = sal_False;
- if (pData)
+ bool bUseFoundDBData = false;
+ if ( pFoundDBData )
{
- // Bereich nehmen, wenn nichts anderes markiert
-
+ // check, if found database range can be used
SCTAB nDummy;
SCCOL nOldCol1;
SCROW nOldRow1;
SCCOL nOldCol2;
SCROW nOldRow2;
- pData->GetArea( nDummy, nOldCol1,nOldRow1, nOldCol2,nOldRow2 );
-// sal_Bool bIsNoName = ( pData->GetName() == ScGlobal::GetRscString( STR_DB_NONAME ) );
- sal_Bool bIsNoName = pData->IsBuildin();
+ pFoundDBData->GetArea( nDummy, nOldCol1, nOldRow1, nOldCol2, nOldRow2 );
- if (!bSelected)
+ const bool bIsUnnamedOne = pFoundDBData->IsInternalUnnamed();
+ const bool bIsInternalForAutoFilter = pFoundDBData->IsInternalForAutoFilter();
+ if ( !bSelected )
{
- bUseThis = sal_True;
- if ( bIsNoName && eMode == SC_DB_MAKE )
+ bUseFoundDBData = true;
+ if ( ( bIsUnnamedOne || bIsInternalForAutoFilter )
+ && ( eMode == SC_DB_MAKE || eMode == SC_DB_MAKE_AUTOFILTER ) )
{
- // If nothing marked or only one row marked, adapt
- // "unbenannt"/"unnamed" to contiguous area.
+ // If nothing marked or only one row marked, adapt found database range to contiguous area.
nStartCol = nCol;
nStartRow = nRow;
- if (bOnlyDown)
+ if ( bOnlyDown )
{
nEndCol = rMarked.aEnd.Col();
nEndRow = rMarked.aEnd.Row();
@@ -210,50 +217,63 @@ ScDBData* ScDocShell::GetDBData( const ScRange& rMarked, ScGetDBMode eMode, ScGe
}
aDocument.GetDataArea( nTab, nStartCol, nStartRow, nEndCol, nEndRow, sal_False, bOnlyDown );
if ( nOldCol1 != nStartCol || nOldCol2 != nEndCol || nOldRow1 != nStartRow )
- bUseThis = sal_False; // passt gar nicht
+ {
+ bUseFoundDBData = false;
+ }
else if ( nOldRow2 != nEndRow )
{
- // Bereich auf neue End-Zeile erweitern
- pData->SetArea( nTab, nOldCol1,nOldRow1, nOldCol2,nEndRow );
+ // adapt found internal database range to new end row
+ pFoundDBData->SetArea( nTab, nOldCol1,nOldRow1, nOldCol2,nEndRow );
}
}
}
else
{
- if ( nOldCol1 == nStartCol && nOldRow1 == nStartRow &&
- nOldCol2 == nEndCol && nOldRow2 == nEndRow ) // genau markiert?
- bUseThis = sal_True;
+ if ( nOldCol1 == nStartCol
+ && nOldRow1 == nStartRow
+ && nOldCol2 == nEndCol
+ && nOldRow2 == nEndRow )
+ {
+ bUseFoundDBData = true;
+ }
else
- bUseThis = sal_False; // immer Markierung nehmen (Bug 11964)
+ {
+ bUseFoundDBData = false;
+ }
}
- // fuer Import nie "unbenannt" nehmen
+ // adapt internal unnamed database range to an auto filter one
+ // otherwise the auto filter is lost when the internal unnamed one is changed/reused/deleted
+ if ( bUseFoundDBData
+ && eMode == SC_DB_MAKE_AUTOFILTER
+ && bIsUnnamedOne )
+ {
+ pFoundDBData->SetName( aDocument.GetDBCollection()->GetNewDefaultDBName() );
+ }
- if ( bUseThis && eMode == SC_DB_IMPORT && bIsNoName )
- bUseThis = sal_False;
+ // no internal database range for Import
+ if ( bUseFoundDBData
+ && eMode == SC_DB_IMPORT
+ && ( bIsUnnamedOne || bIsInternalForAutoFilter ) )
+ {
+ bUseFoundDBData = false;
+ }
}
- if ( bUseThis )
+ if ( bUseFoundDBData )
{
- pData->GetArea( nStartTab, nStartCol,nStartRow, nEndCol,nEndRow );
- nEndTab = nStartTab;
+ return pFoundDBData;
}
- else if ( eMode == SC_DB_OLD )
+
+ if ( eMode == SC_DB_OLD )
{
- pData = NULL; // nichts gefunden
- nStartCol = nEndCol = nCol;
- nStartRow = nEndRow = nRow;
- nStartTab = nEndTab = nTab;
-// bMark = sal_False; // nichts zu markieren
+ // no existing database range found
+ return NULL;
}
- else
+ else // eMode == SC_DB_MAKE||SC_DB_IMPORT||SC_DB_MAKE_AUTOFILTER
{
- if ( bSelected )
+ if ( !bSelected )
{
-// bMark = sal_False;
- }
- else
- { // zusammenhaengender Bereich
nStartCol = nCol;
nStartRow = nRow;
if (bOnlyDown)
@@ -269,49 +289,52 @@ ScDBData* ScDocShell::GetDBData( const ScRange& rMarked, ScGetDBMode eMode, ScGe
aDocument.GetDataArea( nTab, nStartCol, nStartRow, nEndCol, nEndRow, sal_False, bOnlyDown );
}
- sal_Bool bHasHeader = aDocument.HasColHeader( nStartCol,nStartRow, nEndCol,nEndRow, nTab );
+ const sal_Bool bHasHeader = aDocument.HasColHeader( nStartCol, nStartRow, nEndCol, nEndRow, nTab );
- ScDBData* pNoNameData;
- sal_uInt16 nNoNameIndex;
+ ScDBData* pDBData = NULL;
+ sal_uInt16 nUnnamedDBIndex;
ScDBCollection* pColl = aDocument.GetDBCollection();
- if ( eMode != SC_DB_IMPORT &&
- pColl->SearchName( ScGlobal::GetRscString( STR_DB_NONAME ), nNoNameIndex ) )
+ if ( eMode == SC_DB_MAKE &&
+ pColl->SearchName( ScGlobal::GetRscString( STR_DB_NONAME ), nUnnamedDBIndex ) )
{
- pNoNameData = (*pColl)[nNoNameIndex];
+ // adapt existing unnamed database range
+ pDBData = (*pColl)[nUnnamedDBIndex];
if ( !pOldAutoDBRange )
{
// store the old unnamed database range with its settings for undo
// (store at the first change, get the state before all changes)
- pOldAutoDBRange = new ScDBData( *pNoNameData );
+ pOldAutoDBRange = new ScDBData( *pDBData );
}
- SCCOL nOldX1; // alten Bereich sauber wegnehmen
- SCROW nOldY1; //! (UNDO ???)
+ SCCOL nOldX1;
+ SCROW nOldY1;
SCCOL nOldX2;
SCROW nOldY2;
SCTAB nOldTab;
- pNoNameData->GetArea( nOldTab, nOldX1, nOldY1, nOldX2, nOldY2 );
+ pDBData->GetArea( nOldTab, nOldX1, nOldY1, nOldX2, nOldY2 );
DBAreaDeleted( nOldTab, nOldX1, nOldY1, nOldX2, nOldY2 );
- pNoNameData->SetSortParam( ScSortParam() ); // Parameter zuruecksetzen
- pNoNameData->SetQueryParam( ScQueryParam() );
- pNoNameData->SetSubTotalParam( ScSubTotalParam() );
+ pDBData->SetSortParam( ScSortParam() );
+ pDBData->SetQueryParam( ScQueryParam() );
+ pDBData->SetSubTotalParam( ScSubTotalParam() );
- pNoNameData->SetArea( nTab, nStartCol,nStartRow, nEndCol,nEndRow ); // neu setzen
- pNoNameData->SetByRow( sal_True );
- pNoNameData->SetHeader( bHasHeader );
- pNoNameData->SetAutoFilter( sal_False );
+ pDBData->SetArea( nTab, nStartCol,nStartRow, nEndCol,nEndRow );
+ pDBData->SetByRow( sal_True );
+ pDBData->SetHeader( bHasHeader );
+ pDBData->SetAutoFilter( sal_False );
}
else
{
ScDBCollection* pUndoColl = NULL;
String aNewName;
- if (eMode==SC_DB_IMPORT)
+ switch ( eMode )
+ {
+ case SC_DB_IMPORT:
{
- aDocument.CompileDBFormula( sal_True ); // CreateFormulaString
- pUndoColl = new ScDBCollection( *pColl ); // Undo fuer Import1-Bereich
+ aDocument.CompileDBFormula( sal_True );
+ pUndoColl = new ScDBCollection( *pColl );
String aImport = ScGlobal::GetRscString( STR_DBNAME_IMPORT );
long nCount = 0;
@@ -324,197 +347,51 @@ ScDBData* ScDocShell::GetDBData( const ScRange& rMarked, ScGetDBMode eMode, ScGe
}
while (pColl->SearchName( aNewName, nDummy ));
}
- else
- //aNewName = ScGlobal::GetRscString( STR_DB_NONAME );
- aNewName = pColl->GetNewDefaultDBName();
-
- pNoNameData = new ScDBData( aNewName, nTab,
- nStartCol,nStartRow, nEndCol,nEndRow,
- sal_True, bHasHeader );
- pColl->Insert( pNoNameData );
+ break;
- if ( pUndoColl )
+ case SC_DB_MAKE_AUTOFILTER:
{
- aDocument.CompileDBFormula( sal_False ); // CompileFormulaString
+ aDocument.CompileDBFormula( sal_True );
+ pUndoColl = new ScDBCollection( *pColl );
- ScDBCollection* pRedoColl = new ScDBCollection( *pColl );
- GetUndoManager()->AddUndoAction( new ScUndoDBData( this, pUndoColl, pRedoColl ) );
+ aNewName = pColl->GetNewDefaultDBName();
}
+ break;
- // neuen Bereich am Sba anmelden nicht mehr noetig
-
- // "Import1" etc am Navigator bekanntmachen
- if (eMode==SC_DB_IMPORT)
- SFX_APP()->Broadcast( SfxSimpleHint( SC_HINT_DBAREAS_CHANGED ) );
- }
- pData = pNoNameData;
- }
-
-// if (bMark)
-// MarkRange( ScRange( nStartCol, nStartRow, nTab, nEndCol, nEndRow, nTab ), sal_False );
-
- return pData;
-}
-
-ScDBData* ScDocShell::GetDBDataAdd( const ScRange& rMarked, ScGetDBMode eMode, ScGetDBSelection eSel )
-{
- SCCOL nCol = rMarked.aStart.Col();
- SCROW nRow = rMarked.aStart.Row();
- SCTAB nTab = rMarked.aStart.Tab();
-
- SCCOL nStartCol = nCol;
- SCROW nStartRow = nRow;
- SCCOL nEndCol = rMarked.aEnd.Col();
- SCROW nEndRow = rMarked.aEnd.Row();
-
- ScDBData* pData = NULL;
- ScDBData* pCursorData;
- pCursorData = aDocument.GetDBAtArea( nTab, nStartCol, nStartRow, nEndCol, nEndRow );
- if ( !pCursorData )
- pCursorData = aDocument.GetDBAtCursor( nStartCol, nStartRow, nTab );
-
- //Get DBData at current table
- ScDBData* pTableData = aDocument.GetDBAtTable( nTab, eMode );
-
- if ( eMode == SC_DB_OLD_FILTER )
- return pTableData;
-
- sal_Bool bSelected = ( eSel == SC_DBSEL_FORCE_MARK || rMarked.aStart != rMarked.aEnd );
- bool bOnlyDown = (!bSelected && eSel == SC_DBSEL_ROW_DOWN && rMarked.aStart.Row() == rMarked.aEnd.Row());
-
- sal_Bool bUseThis = sal_False;
- if (pCursorData)
- {
- SCTAB nDummy;
- SCCOL nOldCol1;
- SCROW nOldRow1;
- SCCOL nOldCol2;
- SCROW nOldRow2;
- pCursorData->GetArea( nDummy, nOldCol1,nOldRow1, nOldCol2,nOldRow2 );
- if ( !bSelected )
- {
- ScRange tmpRange;
- if ( !pCursorData->IsBuildin() && pCursorData->GetAdvancedQuerySource(tmpRange))
- bUseThis = sal_True;
- else
- {
- nStartCol = nCol;
- nStartRow = nRow;
- nEndCol = nStartCol;
- nEndRow = nStartRow;
- aDocument.GetDataArea( nTab, nStartCol, nStartRow, nEndCol, nEndRow, sal_False, bOnlyDown );
- if ( nOldCol1 != nStartCol || nOldCol2 != nEndCol || nOldRow1 != nStartRow )
- bUseThis = sal_False;
- else
- {
- bUseThis = sal_True;
- if ( nOldRow2 != nEndRow )// Range of new end-line expand
- pCursorData->SetArea( nTab, nOldCol1,nOldRow1, nOldCol2,nEndRow );
- }
+ case SC_DB_MAKE:
+ {
+ aNewName = ScGlobal::GetRscString( STR_DB_NONAME );
}
+ break;
- }
- else
- {
- if ( nOldCol1 == nStartCol && nOldRow1 == nStartRow && nOldCol2 == nEndCol && nOldRow2 == nEndRow )
- bUseThis = sal_True;
- else
- bUseThis = sal_False; // Always take mark (Bug 11964)
- }
- }
+ default:
+ DBG_ERROR( "<ScDocShell::GetDBData(..)> - unexcepted <eMode>" );
+ break;
+ }
- if ( bUseThis )
- {
- pData = pCursorData;
- if ( pTableData && eMode == SC_DB_MAKE_FILTER && !(*pTableData == *pCursorData ) )
- {
- if ( !pOldAutoDBRange )
- pOldAutoDBRange = new ScDBData(*pTableData);
- SCCOL nOldX1;
- SCROW nOldY1;
- SCCOL nOldX2;
- SCROW nOldY2;
- SCTAB nOldTab;
- pTableData->GetArea( nOldTab, nOldX1, nOldY1, nOldX2, nOldY2 );
+ pDBData = new ScDBData(
+ aNewName, nTab, nStartCol, nStartRow, nEndCol, nEndRow, sal_True, bHasHeader );
+ pColl->Insert( pDBData );
- if (pTableData->HasQueryParam())
+ if ( pUndoColl )
{
- ScQueryParam aParam;
- pTableData->GetQueryParam(aParam);
- SCSIZE nEC = aParam.GetEntryCount();
- for (SCSIZE i=0; i<nEC; i++)
- aParam.GetEntry(i).bDoQuery = sal_False;
- aParam.bDuplicate = sal_True;
- ScDBDocFunc aDBDocFunc( *this );
- aDBDocFunc.Query( nTab, aParam, NULL, sal_False, sal_False );
- }
+ aDocument.CompileDBFormula( sal_False );
- DBAreaDeleted( nOldTab, nOldX1, nOldY1, nOldX2, nOldY2 );
- pTableData->SetQueryParam( ScQueryParam() );
- pTableData->SetAutoFilter( sal_False );
- }
-
- }
- else
- {
- if ( bSelected )
- {
-// bMark = sal_False;
- }
- else
- {
- nStartCol = nCol;
- nStartRow = nRow;
- nEndCol = nStartCol;
- nEndRow = nStartRow;
- aDocument.GetDataArea( nTab, nStartCol, nStartRow, nEndCol, nEndRow, sal_False, bOnlyDown );
- }
- sal_Bool bHasHeader = aDocument.HasColHeader( nStartCol,nStartRow, nEndCol,nEndRow, nTab );
- ScDBCollection* pColl = aDocument.GetDBCollection();
- if ( pTableData )
- {
- if ( !pOldAutoDBRange )
- pOldAutoDBRange = new ScDBData(*pTableData);
- SCCOL nOldX1;
- SCROW nOldY1;
- SCCOL nOldX2;
- SCROW nOldY2;
- SCTAB nOldTab;
- pTableData->GetArea( nOldTab, nOldX1, nOldY1, nOldX2, nOldY2 );
+ ScDBCollection* pRedoColl = new ScDBCollection( *pColl );
+ GetUndoManager()->AddUndoAction( new ScUndoDBData( this, pUndoColl, pRedoColl ) );
+ }
- if (pTableData->HasQueryParam())
+ // notify Navigator about database range "Import[X]"
+ if ( eMode==SC_DB_IMPORT )
{
- ScQueryParam aParam;
- pTableData->GetQueryParam(aParam);
- SCSIZE nEC = aParam.GetEntryCount();
- for (SCSIZE i=0; i<nEC; i++)
- aParam.GetEntry(i).bDoQuery = sal_False;
- aParam.bDuplicate = sal_True;
- ScDBDocFunc aDBDocFunc( *this );
- aDBDocFunc.Query( nTab, aParam, NULL, sal_False, sal_False );
+ SFX_APP()->Broadcast( SfxSimpleHint( SC_HINT_DBAREAS_CHANGED ) );
}
-
- DBAreaDeleted( nOldTab, nOldX1, nOldY1, nOldX2, nOldY2 );
-
- pTableData->SetSortParam( ScSortParam() );
- pTableData->SetQueryParam( ScQueryParam() );
- pTableData->SetSubTotalParam( ScSubTotalParam() );
-
- pTableData->SetArea( nTab, nStartCol, nStartRow, nEndCol, nEndRow );
- pTableData->SetByRow( sal_True );
- pTableData->SetHeader( bHasHeader );
- pTableData->SetAutoFilter( sal_False );
}
- else
- {
- String aNewName = pColl->GetNewDefaultDBName();
- pTableData = new ScDBData( aNewName, nTab, nStartCol,nStartRow, nEndCol,nEndRow, sal_True, bHasHeader );
- pColl->Insert( pTableData );
- }
- pData = pTableData;
+
+ return pDBData;
}
- return pData;
+ return NULL; // never reached
}
@@ -657,18 +534,19 @@ void ScDocShell::RefreshPivotTables( const ScRange& rSource )
String lcl_GetAreaName( ScDocument* pDoc, ScArea* pArea )
{
String aName;
- sal_Bool bOk = sal_False;
- ScDBData* pData = pDoc->GetDBAtArea( pArea->nTab, pArea->nColStart, pArea->nRowStart,
- pArea->nColEnd, pArea->nRowEnd );
+ bool bOk = false;
+ ScDBData* pData = pDoc->GetDBAtArea( pArea->nTab, pArea->nColStart, pArea->nRowStart, pArea->nColEnd, pArea->nRowEnd );
if (pData)
{
pData->GetName( aName );
- if ( aName != ScGlobal::GetRscString( STR_DB_NONAME ) )
- bOk = sal_True;
+ if ( !pData->IsInternalUnnamed() )
+ bOk = true;
}
if (!bOk)
+ {
pDoc->GetName( pArea->nTab, aName );
+ }
return aName;
}