Lines 150-155
Link Here
|
150 |
|
150 |
|
151 |
ScDBData* ScDocShell::GetDBData( const ScRange& rMarked, ScGetDBMode eMode, ScGetDBSelection eSel ) |
151 |
ScDBData* ScDocShell::GetDBData( const ScRange& rMarked, ScGetDBMode eMode, ScGetDBSelection eSel ) |
152 |
{ |
152 |
{ |
|
|
153 |
if ( eMode == SC_DB_MAKE_FILTER || eMode == SC_DB_MAKE_SORT || eMode == SC_DB_MAKE_SUBTOTAL || eMode == SC_DB_OLD_FILTER ) |
154 |
return GetDBDataAdd(rMarked, eMode, eSel); |
153 |
SCCOL nCol = rMarked.aStart.Col(); |
155 |
SCCOL nCol = rMarked.aStart.Col(); |
154 |
SCROW nRow = rMarked.aStart.Row(); |
156 |
SCROW nRow = rMarked.aStart.Row(); |
155 |
SCTAB nTab = rMarked.aStart.Tab(); |
157 |
SCTAB nTab = rMarked.aStart.Tab(); |
Lines 184-190
Link Here
|
184 |
SCCOL nOldCol2; |
186 |
SCCOL nOldCol2; |
185 |
SCROW nOldRow2; |
187 |
SCROW nOldRow2; |
186 |
pData->GetArea( nDummy, nOldCol1,nOldRow1, nOldCol2,nOldRow2 ); |
188 |
pData->GetArea( nDummy, nOldCol1,nOldRow1, nOldCol2,nOldRow2 ); |
187 |
sal_Bool bIsNoName = ( pData->GetName() == ScGlobal::GetRscString( STR_DB_NONAME ) ); |
189 |
// sal_Bool bIsNoName = ( pData->GetName() == ScGlobal::GetRscString( STR_DB_NONAME ) ); |
|
|
190 |
sal_Bool bIsNoName = pData->IsBuildin(); |
188 |
|
191 |
|
189 |
if (!bSelected) |
192 |
if (!bSelected) |
190 |
{ |
193 |
{ |
Lines 322-328
Link Here
|
322 |
while (pColl->SearchName( aNewName, nDummy )); |
325 |
while (pColl->SearchName( aNewName, nDummy )); |
323 |
} |
326 |
} |
324 |
else |
327 |
else |
325 |
aNewName = ScGlobal::GetRscString( STR_DB_NONAME ); |
328 |
//aNewName = ScGlobal::GetRscString( STR_DB_NONAME ); |
|
|
329 |
aNewName = pColl->GetNewDefaultDBName(); |
330 |
|
326 |
pNoNameData = new ScDBData( aNewName, nTab, |
331 |
pNoNameData = new ScDBData( aNewName, nTab, |
327 |
nStartCol,nStartRow, nEndCol,nEndRow, |
332 |
nStartCol,nStartRow, nEndCol,nEndRow, |
328 |
sal_True, bHasHeader ); |
333 |
sal_True, bHasHeader ); |
Lines 351-356
Link Here
|
351 |
return pData; |
356 |
return pData; |
352 |
} |
357 |
} |
353 |
|
358 |
|
|
|
359 |
ScDBData* ScDocShell::GetDBDataAdd( const ScRange& rMarked, ScGetDBMode eMode, ScGetDBSelection eSel ) |
360 |
{ |
361 |
SCCOL nCol = rMarked.aStart.Col(); |
362 |
SCROW nRow = rMarked.aStart.Row(); |
363 |
SCTAB nTab = rMarked.aStart.Tab(); |
364 |
|
365 |
SCCOL nStartCol = nCol; |
366 |
SCROW nStartRow = nRow; |
367 |
SCTAB nStartTab = nTab; |
368 |
SCCOL nEndCol = rMarked.aEnd.Col(); |
369 |
SCROW nEndRow = rMarked.aEnd.Row(); |
370 |
SCTAB nEndTab = rMarked.aEnd.Tab(); |
371 |
|
372 |
ScDBData* pData = NULL; |
373 |
ScDBData* pCursorData; |
374 |
pCursorData = aDocument.GetDBAtArea( nTab, nStartCol, nStartRow, nEndCol, nEndRow ); |
375 |
if ( !pCursorData ) |
376 |
pCursorData = aDocument.GetDBAtCursor( nStartCol, nStartRow, nTab ); |
377 |
|
378 |
//Get DBData at current table |
379 |
ScDBData* pTableData = aDocument.GetDBAtTable( nTab, eMode ); |
380 |
|
381 |
if ( eMode == SC_DB_OLD_FILTER ) |
382 |
return pTableData; |
383 |
|
384 |
sal_Bool bSelected = ( eSel == SC_DBSEL_FORCE_MARK || rMarked.aStart != rMarked.aEnd ); |
385 |
bool bOnlyDown = (!bSelected && eSel == SC_DBSEL_ROW_DOWN && rMarked.aStart.Row() == rMarked.aEnd.Row()); |
386 |
|
387 |
sal_Bool bUseThis = sal_False; |
388 |
if (pCursorData) |
389 |
{ |
390 |
SCTAB nDummy; |
391 |
SCCOL nOldCol1; |
392 |
SCROW nOldRow1; |
393 |
SCCOL nOldCol2; |
394 |
SCROW nOldRow2; |
395 |
pCursorData->GetArea( nDummy, nOldCol1,nOldRow1, nOldCol2,nOldRow2 ); |
396 |
if ( !bSelected ) |
397 |
{ |
398 |
ScRange tmpRange; |
399 |
if ( !pCursorData->IsBuildin() && pCursorData->GetAdvancedQuerySource(tmpRange)) |
400 |
bUseThis = sal_True; |
401 |
else |
402 |
{ |
403 |
nStartCol = nCol; |
404 |
nStartRow = nRow; |
405 |
nEndCol = nStartCol; |
406 |
nEndRow = nStartRow; |
407 |
aDocument.GetDataArea( nTab, nStartCol, nStartRow, nEndCol, nEndRow, sal_False, bOnlyDown ); |
408 |
if ( nOldCol1 != nStartCol || nOldCol2 != nEndCol || nOldRow1 != nStartRow ) |
409 |
bUseThis = sal_False; |
410 |
else |
411 |
{ |
412 |
bUseThis = sal_True; |
413 |
if ( nOldRow2 != nEndRow )// Range of new end-line expand |
414 |
pCursorData->SetArea( nTab, nOldCol1,nOldRow1, nOldCol2,nEndRow ); |
415 |
} |
416 |
} |
417 |
|
418 |
} |
419 |
else |
420 |
{ |
421 |
if ( nOldCol1 == nStartCol && nOldRow1 == nStartRow && nOldCol2 == nEndCol && nOldRow2 == nEndRow ) |
422 |
bUseThis = sal_True; |
423 |
else |
424 |
bUseThis = sal_False; // Always take mark (Bug 11964) |
425 |
} |
426 |
} |
427 |
|
428 |
if ( bUseThis ) |
429 |
{ |
430 |
pData = pCursorData; |
431 |
if ( pTableData && eMode == SC_DB_MAKE_FILTER && !(*pTableData == *pCursorData ) ) |
432 |
{ |
433 |
if ( !pOldAutoDBRange ) |
434 |
pOldAutoDBRange = new ScDBData(*pTableData); |
435 |
SCCOL nOldX1; |
436 |
SCROW nOldY1; |
437 |
SCCOL nOldX2; |
438 |
SCROW nOldY2; |
439 |
SCTAB nOldTab; |
440 |
pTableData->GetArea( nOldTab, nOldX1, nOldY1, nOldX2, nOldY2 ); |
441 |
|
442 |
if (pTableData->HasQueryParam()) |
443 |
{ |
444 |
ScQueryParam aParam; |
445 |
pTableData->GetQueryParam(aParam); |
446 |
SCSIZE nEC = aParam.GetEntryCount(); |
447 |
for (SCSIZE i=0; i<nEC; i++) |
448 |
aParam.GetEntry(i).bDoQuery = sal_False; |
449 |
aParam.bDuplicate = sal_True; |
450 |
ScDBDocFunc aDBDocFunc( *this ); |
451 |
aDBDocFunc.Query( nTab, aParam, NULL, sal_False, sal_False ); |
452 |
} |
453 |
|
454 |
DBAreaDeleted( nOldTab, nOldX1, nOldY1, nOldX2, nOldY2 ); |
455 |
pTableData->SetQueryParam( ScQueryParam() ); |
456 |
pTableData->SetAutoFilter( sal_False ); |
457 |
} |
458 |
|
459 |
} |
460 |
else |
461 |
{ |
462 |
if ( bSelected ) |
463 |
{ |
464 |
// bMark = sal_False; |
465 |
} |
466 |
else |
467 |
{ |
468 |
nStartCol = nCol; |
469 |
nStartRow = nRow; |
470 |
nEndCol = nStartCol; |
471 |
nEndRow = nStartRow; |
472 |
aDocument.GetDataArea( nTab, nStartCol, nStartRow, nEndCol, nEndRow, sal_False, bOnlyDown ); |
473 |
} |
474 |
sal_Bool bHasHeader = aDocument.HasColHeader( nStartCol,nStartRow, nEndCol,nEndRow, nTab ); |
475 |
ScDBCollection* pColl = aDocument.GetDBCollection(); |
476 |
if ( pTableData ) |
477 |
{ |
478 |
if ( !pOldAutoDBRange ) |
479 |
pOldAutoDBRange = new ScDBData(*pTableData); |
480 |
SCCOL nOldX1; |
481 |
SCROW nOldY1; |
482 |
SCCOL nOldX2; |
483 |
SCROW nOldY2; |
484 |
SCTAB nOldTab; |
485 |
pTableData->GetArea( nOldTab, nOldX1, nOldY1, nOldX2, nOldY2 ); |
486 |
|
487 |
if (pTableData->HasQueryParam()) |
488 |
{ |
489 |
ScQueryParam aParam; |
490 |
pTableData->GetQueryParam(aParam); |
491 |
SCSIZE nEC = aParam.GetEntryCount(); |
492 |
for (SCSIZE i=0; i<nEC; i++) |
493 |
aParam.GetEntry(i).bDoQuery = sal_False; |
494 |
aParam.bDuplicate = sal_True; |
495 |
ScDBDocFunc aDBDocFunc( *this ); |
496 |
aDBDocFunc.Query( nTab, aParam, NULL, sal_False, sal_False ); |
497 |
} |
498 |
|
499 |
DBAreaDeleted( nOldTab, nOldX1, nOldY1, nOldX2, nOldY2 ); |
500 |
|
501 |
pTableData->SetSortParam( ScSortParam() ); |
502 |
pTableData->SetQueryParam( ScQueryParam() ); |
503 |
pTableData->SetSubTotalParam( ScSubTotalParam() ); |
504 |
|
505 |
pTableData->SetArea( nTab, nStartCol, nStartRow, nEndCol, nEndRow ); |
506 |
pTableData->SetByRow( sal_True ); |
507 |
pTableData->SetHeader( bHasHeader ); |
508 |
pTableData->SetAutoFilter( sal_False ); |
509 |
} |
510 |
else |
511 |
{ |
512 |
String aNewName = pColl->GetNewDefaultDBName(); |
513 |
pTableData = new ScDBData( aNewName, nTab, nStartCol,nStartRow, nEndCol,nEndRow, sal_True, bHasHeader ); |
514 |
pColl->Insert( pTableData ); |
515 |
} |
516 |
pData = pTableData; |
517 |
} |
518 |
|
519 |
return pData; |
520 |
} |
521 |
|
522 |
|
354 |
ScDBData* ScDocShell::GetOldAutoDBRange() |
523 |
ScDBData* ScDocShell::GetOldAutoDBRange() |
355 |
{ |
524 |
{ |
356 |
ScDBData* pRet = pOldAutoDBRange; |
525 |
ScDBData* pRet = pOldAutoDBRange; |