View | Details | Raw Unified | Return to issue 12666
Collapse All | Expand All

(-)sc/inc/dbcolect.hxx (+5 lines)
Lines 136-141 Link Here
136
			void		GetArea(SCTAB& rTab, SCCOL& rCol1, SCROW& rRow1, SCCOL& rCol2, SCROW& rRow2) const;
136
			void		GetArea(SCTAB& rTab, SCCOL& rCol1, SCROW& rRow1, SCCOL& rCol2, SCROW& rRow2) const;
137
			SC_DLLPUBLIC void		GetArea(ScRange& rRange) const;
137
			SC_DLLPUBLIC void		GetArea(ScRange& rRange) const;
138
			void		SetArea(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2);
138
			void		SetArea(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2);
139
            //If the name of DBData is started with "unnamed", it will be recognized as build in DBData
140
            sal_Bool        IsBuildin();
139
			void		MoveTo(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2);
141
			void		MoveTo(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2);
140
			sal_Bool		IsByRow() const 				{ return bByRow; }
142
			sal_Bool		IsByRow() const 				{ return bByRow; }
141
			void		SetByRow(sal_Bool bByR) 			{ bByRow = bByR; }
143
			void		SetByRow(sal_Bool bByR) 			{ bByRow = bByR; }
Lines 216-221 Link Here
216
			ScDBData*	GetDBAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab, sal_Bool bStartOnly) const;
218
			ScDBData*	GetDBAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab, sal_Bool bStartOnly) const;
217
			ScDBData*	GetDBAtArea(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2) const;
219
			ScDBData*	GetDBAtArea(SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2) const;
218
			ScDBData*       GetFilterDBAtTable(SCTAB nTab) const;
220
			ScDBData*       GetFilterDBAtTable(SCTAB nTab) const;
221
            ScDBData*	GetDBAtTable(SCTAB nTab, ScGetDBMode eMode) const;
219
222
220
	sal_Bool	SearchName( const String& rName, sal_uInt16& rIndex ) const;
223
	sal_Bool	SearchName( const String& rName, sal_uInt16& rIndex ) const;
221
224
Lines 234-239 Link Here
234
	void			SetRefreshHandler( const Link& rLink )
237
	void			SetRefreshHandler( const Link& rLink )
235
						{ aRefreshHandler = rLink; }
238
						{ aRefreshHandler = rLink; }
236
	const Link&		GetRefreshHandler() const	{ return aRefreshHandler; }
239
	const Link&		GetRefreshHandler() const	{ return aRefreshHandler; }
240
    String      GetNewDefaultDBName();
241
    /*sal_Bool        IsFiltered(SCTAB nTab, SCROW nRow);*/
237
};
242
};
238
243
239
#endif
244
#endif
(-)sc/inc/document.hxx (+1 lines)
Lines 505-510 Link Here
505
//UNUSED2008-05  ScRangeData*	GetRangeAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab,
505
//UNUSED2008-05  ScRangeData*	GetRangeAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab,
506
//UNUSED2008-05                                      sal_Bool bStartOnly = sal_False) const;
506
//UNUSED2008-05                                      sal_Bool bStartOnly = sal_False) const;
507
	SC_DLLPUBLIC ScRangeData*	GetRangeAtBlock( const ScRange& rBlock, String* pName=NULL ) const;
507
	SC_DLLPUBLIC ScRangeData*	GetRangeAtBlock( const ScRange& rBlock, String* pName=NULL ) const;
508
    ScDBData*       GetDBAtTable(SCTAB nTab, ScGetDBMode eMode) const;
508
509
509
	SC_DLLPUBLIC ScDPCollection*		GetDPCollection();
510
	SC_DLLPUBLIC ScDPCollection*		GetDPCollection();
510
	ScDPObject*			GetDPAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab) const;
511
	ScDPObject*			GetDPAtCursor(SCCOL nCol, SCROW nRow, SCTAB nTab) const;
(-)sc/inc/global.hxx (-1 / +5 lines)
Lines 406-412 Link Here
406
{
406
{
407
	SC_DB_MAKE,		// wenn noetig, "unbenannt" anlegen
407
	SC_DB_MAKE,		// wenn noetig, "unbenannt" anlegen
408
	SC_DB_IMPORT,	// wenn noetig, "Importx" anlegen
408
	SC_DB_IMPORT,	// wenn noetig, "Importx" anlegen
409
	SC_DB_OLD		// nicht neu anlegen
409
	SC_DB_OLD,		// nicht neu anlegen
410
	SC_DB_MAKE_FILTER,   // to create a new filter/sort/subtotal
411
	SC_DB_MAKE_SORT,
412
	SC_DB_MAKE_SUBTOTAL,
413
    SC_DB_OLD_FILTER   //to find a existed filter
410
};
414
};
411
415
412
/// For ScDBFunc::GetDBData()
416
/// For ScDBFunc::GetDBData()
(-)sc/source/core/data/documen3.cxx (-1 / +9 lines)
Lines 192-197 Link Here
192
	else
192
	else
193
		return NULL;
193
		return NULL;
194
}
194
}
195
ScDBData* ScDocument::GetDBAtTable(SCTAB nTab, ScGetDBMode eMode) const
196
{
197
	if (pDBCollection)
198
		return pDBCollection->GetDBAtTable(nTab, eMode);
199
	else
200
		return NULL;
201
}
195
202
196
ScDBData* ScDocument::GetFilterDBAtTable(SCTAB nTab) const
203
ScDBData* ScDocument::GetFilterDBAtTable(SCTAB nTab) const
197
{
204
{
Lines 1291-1297 Link Here
1291
1298
1292
sal_Bool ScDocument::HasAutoFilter( SCCOL nCurCol, SCROW nCurRow, SCTAB nCurTab )
1299
sal_Bool ScDocument::HasAutoFilter( SCCOL nCurCol, SCROW nCurRow, SCTAB nCurTab )
1293
{
1300
{
1294
	ScDBData*		pDBData			= GetDBAtCursor( nCurCol, nCurRow, nCurTab );
1301
	//ScDBData*		pDBData			= GetDBAtCursor( nCurCol, nCurRow, nCurTab );
1302
	ScDBData*		pDBData			= GetDBAtTable(nCurTab, SC_DB_OLD_FILTER);
1295
	sal_Bool			bHasAutoFilter	= ( pDBData != NULL );
1303
	sal_Bool			bHasAutoFilter	= ( pDBData != NULL );
1296
1304
1297
	if ( pDBData )
1305
	if ( pDBData )
(-)sc/source/core/tool/dbcolect.cxx (-6 / +71 lines)
Lines 36-41 Link Here
36
#include "queryparam.hxx"
36
#include "queryparam.hxx"
37
#include "globstr.hrc"
37
#include "globstr.hrc"
38
38
39
#define SC_DBNAME_UNNAMED "__Anonymous_Sheet_DB__"
39
40
40
//---------------------------------------------------------------------------------------
41
//---------------------------------------------------------------------------------------
41
42
Lines 690-697 Link Here
690
{
691
{
691
	return new ScDBData(*this);
692
	return new ScDBData(*this);
692
}
693
}
694
sal_Bool    ScDBData::IsBuildin()
695
{
696
    String  aNoName = String::CreateFromAscii(SC_DBNAME_UNNAMED);
697
    String  aBeginName = aName.Copy(0,22);
698
    return  (sal_Bool)(!ScGlobal::GetpTransliteration()->compareString( aNoName, aBeginName ));
699
}
693
700
694
695
//---------------------------------------------------------------------------------------
701
//---------------------------------------------------------------------------------------
696
//	Compare zum Sortieren
702
//	Compare zum Sortieren
697
703
Lines 714-726 Link Here
714
	ScDBData* pNoNameData = NULL;
720
	ScDBData* pNoNameData = NULL;
715
	if (pItems)
721
	if (pItems)
716
	{
722
	{
717
		const String& rNoName = ScGlobal::GetRscString( STR_DB_NONAME );
718
723
719
		for (sal_uInt16 i = 0; i < nCount; i++)
724
		for (sal_uInt16 i = 0; i < nCount; i++)
720
			if (((ScDBData*)pItems[i])->IsDBAtCursor(nCol, nRow, nTab, bStartOnly))
725
			if (((ScDBData*)pItems[i])->IsDBAtCursor(nCol, nRow, nTab, bStartOnly))
721
			{
726
			{
722
				ScDBData* pDB = (ScDBData*)pItems[i];
727
				ScDBData* pDB = (ScDBData*)pItems[i];
723
				if ( pDB->GetName() == rNoName )
728
                if ( pDB->IsBuildin() )
724
					pNoNameData = pDB;
729
					pNoNameData = pDB;
725
				else
730
				else
726
					return pDB;
731
					return pDB;
Lines 734-746 Link Here
734
	ScDBData* pNoNameData = NULL;
739
	ScDBData* pNoNameData = NULL;
735
	if (pItems)
740
	if (pItems)
736
	{
741
	{
737
		const String& rNoName = ScGlobal::GetRscString( STR_DB_NONAME );
738
742
739
		for (sal_uInt16 i = 0; i < nCount; i++)
743
		for (sal_uInt16 i = 0; i < nCount; i++)
740
			if (((ScDBData*)pItems[i])->IsDBAtArea(nTab, nCol1, nRow1, nCol2, nRow2))
744
			if (((ScDBData*)pItems[i])->IsDBAtArea(nTab, nCol1, nRow1, nCol2, nRow2))
741
			{
745
			{
742
				ScDBData* pDB = (ScDBData*)pItems[i];
746
				ScDBData* pDB = (ScDBData*)pItems[i];
743
				if ( pDB->GetName() == rNoName )
747
				if ( pDB->IsBuildin() )
744
					pNoNameData = pDB;
748
					pNoNameData = pDB;
745
				else
749
				else
746
					return pDB;
750
					return pDB;
Lines 903-908 Link Here
903
	return bInserted;
907
	return bInserted;
904
}
908
}
905
909
910
String ScDBCollection::GetNewDefaultDBName()
911
{
912
    String  aNoName = String::CreateFromAscii(SC_DBNAME_UNNAMED);
913
    String  aNewName;
914
    unsigned short  nDummy;
915
    int     i = 1;
916
    do
917
    {
918
        aNewName = aNoName;
919
        aNewName += String::CreateFromInt32( i++ );
920
    }while(SearchName(aNewName,nDummy));
921
    return  aNewName;
922
}
923
/*
924
sal_Bool ScDBCollection::IsFiltered(SCTAB nTab, SCROW nRow)
925
{
926
    SCCOL	nLastCol;
927
    SCROW	nLastRow;
928
    pDoc->GetLastAttrCellArea(nTab, nLastCol, nLastRow);
906
929
930
    if ( pItems )
931
    {
932
        for (unsigned short i = 0; i < nCount; i++)
933
        {
934
            ScDBData*   pData = (ScDBData*)pItems[i];
935
            if ( pData->nTable == nTab && pData->HasQueryParam() && pData->bQueryInplace )
936
                if ( nRow >= (pData->nStartRow + (pData->HasHeader()?1:0)) && nRow <= pData->nEndRow && nRow <= nLastRow )
937
                    return sal_True;
938
        }
939
    }
940
    return sal_False;
941
}
942
*/
943
ScDBData* ScDBCollection::GetDBAtTable(SCTAB nTab, ScGetDBMode eMode) const
944
{
945
    ScDBData* pDataEmpty = NULL;
946
    if (pItems)
947
    {
948
        for (unsigned short i = 0; i < nCount; i++)
949
        {
950
            ScDBData* pDBTemp = (ScDBData*)pItems[i];
951
            if ( pDBTemp->nTable == nTab )						//Sym2_7885 mod
952
            {
953
                sal_Bool bImport = pDBTemp->HasImportParam();
954
                sal_Bool bFilter = pDBTemp->HasAutoFilter() || pDBTemp->HasQueryParam();
955
                sal_Bool bSort = pDBTemp->HasSortParam();
956
                sal_Bool bSubtotal = pDBTemp->HasSubTotalParam();
957
                sal_Bool bAnyParam = bImport || bFilter || bSort || bSubtotal;
958
                if ( ((eMode == SC_DB_MAKE_SORT)    && bSort && !bFilter) ||      //Sym2_7334 mod 20100420
959
                    ((eMode == SC_DB_MAKE_SUBTOTAL) && bSubtotal && !bFilter ) ||
960
                    ((eMode == SC_DB_MAKE_FILTER || eMode == SC_DB_OLD_FILTER) && bFilter ) )
961
                {
962
                    return pDBTemp;
963
                }
964
                else if ( pDBTemp->IsBuildin() && !bAnyParam )	//Sym2_7885 mod
965
                {
966
                    pDataEmpty = pDBTemp;
967
                }
968
            }
969
        }
970
    }
907
971
908
972
    return pDataEmpty;
973
}
(-)sc/source/core/tool/rangeutl.cxx (-1 / +2 lines)
Lines 1032-1038 Link Here
1032
			if ( pDBCollection && nPos < pDBCollection->GetCount() )
1032
			if ( pDBCollection && nPos < pDBCollection->GetCount() )
1033
			{
1033
			{
1034
				ScDBData* pData = (*pDBCollection)[nPos++];
1034
				ScDBData* pData = (*pDBCollection)[nPos++];
1035
				if (pData && pData->GetName() != aStrNoName)
1035
//				if (pData && pData->GetName() != aStrNoName)
1036
				if (pData && !pData->IsBuildin())
1036
				{
1037
				{
1037
					pData->GetArea( rRange );
1038
					pData->GetArea( rRange );
1038
					rName = pData->GetName();
1039
					rName = pData->GetName();
(-)sc/source/ui/dbgui/dbnamdlg.cxx (-2 / +4 lines)
Lines 266-272 Link Here
266
					&& (rEnd.Col()   == nCol2) && (rEnd.Row()   == nRow2 ) )
266
					&& (rEnd.Col()   == nCol2) && (rEnd.Row()   == nRow2 ) )
267
				{
267
				{
268
					pDBData->GetName( theDbName );
268
					pDBData->GetName( theDbName );
269
					if ( theDbName != aStrNoName )
269
					//if ( theDbName != aStrNoName )
270
					if ( !pDBData->IsBuildin() )
270
						aEdName.SetText( theDbName );
271
						aEdName.SetText( theDbName );
271
					else
272
					else
272
						aEdName.SetText( EMPTY_STRING );
273
						aEdName.SetText( EMPTY_STRING );
Lines 378-384 Link Here
378
			if ( pDbData )
379
			if ( pDbData )
379
			{
380
			{
380
				pDbData->GetName( aString );
381
				pDbData->GetName( aString );
381
				if ( aString != aStrNoName )
382
				//if ( aString != aStrNoName )
383
				if ( !pDbData->IsBuildin() )
382
					aEdName.InsertEntry( aString );
384
					aEdName.InsertEntry( aString );
383
			}
385
			}
384
		}
386
		}
(-)sc/source/ui/dbgui/foptmgr.cxx (-1 / +1 lines)
Lines 186-192 Link Here
186
				rBtnHeader.Check( pDBData->HasHeader() );
186
				rBtnHeader.Check( pDBData->HasHeader() );
187
				pDBData->GetName( theDbName );
187
				pDBData->GetName( theDbName );
188
188
189
				if ( theDbName != rStrNoName )
189
                if ( !pDBData->IsBuildin() )
190
				{
190
				{
191
					rBtnHeader.Disable();
191
					rBtnHeader.Disable();
192
				}
192
				}
(-)sc/source/ui/docshell/dbdocfun.cxx (-2 / +2 lines)
Lines 592-598 Link Here
592
		if (pDestData)
592
		if (pDestData)
593
			pNewData = pDestData;				// Bereich vorhanden -> anpassen
593
			pNewData = pDestData;				// Bereich vorhanden -> anpassen
594
		else									// Bereich ab Cursor/Markierung wird angelegt
594
		else									// Bereich ab Cursor/Markierung wird angelegt
595
			pNewData = rDocShell.GetDBData(aDestPos, SC_DB_MAKE, SC_DBSEL_FORCE_MARK );
595
			pNewData = rDocShell.GetDBData(aDestPos, SC_DB_MAKE_SORT, SC_DBSEL_FORCE_MARK );
596
		if (pNewData)
596
		if (pNewData)
597
		{
597
		{
598
			pNewData->SetArea( nTab,
598
			pNewData->SetArea( nTab,
Lines 919-925 Link Here
919
			pNewData = rDocShell.GetDBData(
919
			pNewData = rDocShell.GetDBData(
920
							ScRange( aLocalParam.nCol1, aLocalParam.nRow1, nDestTab,
920
							ScRange( aLocalParam.nCol1, aLocalParam.nRow1, nDestTab,
921
									 aLocalParam.nCol2, aLocalParam.nRow2, nDestTab ),
921
									 aLocalParam.nCol2, aLocalParam.nRow2, nDestTab ),
922
							SC_DB_MAKE, SC_DBSEL_FORCE_MARK );
922
							SC_DB_MAKE_FILTER, SC_DBSEL_FORCE_MARK );
923
923
924
		if (pNewData)
924
		if (pNewData)
925
		{
925
		{
(-)sc/source/ui/docshell/docsh5.cxx (-2 / +171 lines)
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;
(-)sc/source/ui/inc/dbfunc.hxx (+1 lines)
Lines 75-80 Link Here
75
					// DB-Bereich vom Cursor
75
					// DB-Bereich vom Cursor
76
	ScDBData* 		GetDBData( sal_Bool bMarkArea = sal_True, ScGetDBMode eMode = SC_DB_MAKE, ScGetDBSelection eSel = SC_DBSEL_KEEP );
76
	ScDBData* 		GetDBData( sal_Bool bMarkArea = sal_True, ScGetDBMode eMode = SC_DB_MAKE, ScGetDBSelection eSel = SC_DBSEL_KEEP );
77
77
78
    //ScRange         GetDBRange( BOOL bMark, bool bIgnoreNotes );
78
	void			NotifyCloseDbNameDlg( const ScDBCollection& rNewColl, const List& rDelAreaList );
79
	void			NotifyCloseDbNameDlg( const ScDBCollection& rNewColl, const List& rDelAreaList );
79
80
80
	void			Consolidate( const ScConsolidateParam& rParam, sal_Bool bRecord = sal_True );
81
	void			Consolidate( const ScConsolidateParam& rParam, sal_Bool bRecord = sal_True );
(-)sc/source/ui/inc/docsh.hxx (+2 lines)
Lines 158-163 Link Here
158
158
159
    SC_DLLPRIVATE void          EnableSharedSettings( bool bEnable );
159
    SC_DLLPRIVATE void          EnableSharedSettings( bool bEnable );
160
    SC_DLLPRIVATE ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > LoadSharedDocument();
160
    SC_DLLPRIVATE ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > LoadSharedDocument();
161
	ScDBData*		GetDBDataAdd( const ScRange& rMarked, ScGetDBMode eMode, ScGetDBSelection eSel );
161
162
162
    SC_DLLPRIVATE void          UseSheetSaveEntries();
163
    SC_DLLPRIVATE void          UseSheetSaveEntries();
163
164
Lines 306-311 Link Here
306
	ScDBData*		GetDBData( const ScRange& rMarked, ScGetDBMode eMode, ScGetDBSelection eSel );
307
	ScDBData*		GetDBData( const ScRange& rMarked, ScGetDBMode eMode, ScGetDBSelection eSel );
307
    ScDBData*       GetOldAutoDBRange();    // has to be deleted by caller!
308
    ScDBData*       GetOldAutoDBRange();    // has to be deleted by caller!
308
    void            CancelAutoDBRange();    // called when dialog is cancelled
309
    void            CancelAutoDBRange();    // called when dialog is cancelled
310
	ScDBCollection* GetDBCollection(){ return aDocument.GetDBCollection();}
309
311
310
	void			UpdateLinks();			// Link-Eintraege aktuallisieren
312
	void			UpdateLinks();			// Link-Eintraege aktuallisieren
311
	sal_Bool			ReloadTabLinks();		// Links ausfuehren (Inhalt aktualisieren)
313
	sal_Bool			ReloadTabLinks();		// Links ausfuehren (Inhalt aktualisieren)
(-)sc/source/ui/navipi/content.cxx (-1 / +2 lines)
Lines 734-740 Link Here
734
		{
734
		{
735
			ScDBData* pData = (*pDbNames)[i];
735
			ScDBData* pData = (*pDbNames)[i];
736
			String aStrName = pData->GetName();
736
			String aStrName = pData->GetName();
737
			if ( aStrName != aStrNoName )
737
			//if ( aStrName != aStrNoName )
738
			if ( !pData->IsBuildin() )
738
				InsertContent( SC_CONTENT_DBAREA, aStrName );
739
				InsertContent( SC_CONTENT_DBAREA, aStrName );
739
		}
740
		}
740
	}
741
	}
(-)sc/source/ui/undo/undobase.cxx (-2 / +21 lines)
Lines 33-38 Link Here
33
#include "undobase.hxx"
33
#include "undobase.hxx"
34
#include "refundo.hxx"
34
#include "refundo.hxx"
35
#include "docsh.hxx"
35
#include "docsh.hxx"
36
#include "dbdocfun.hxx"
36
#include "tabvwsh.hxx"
37
#include "tabvwsh.hxx"
37
#include "undoolk.hxx"
38
#include "undoolk.hxx"
38
#include "undodraw.hxx"
39
#include "undodraw.hxx"
Lines 390-396 Link Here
390
        sal_uInt16 nNoNameIndex;
391
        sal_uInt16 nNoNameIndex;
391
        ScDocument* pDoc = pDocShell->GetDocument();
392
        ScDocument* pDoc = pDocShell->GetDocument();
392
        ScDBCollection* pColl = pDoc->GetDBCollection();
393
        ScDBCollection* pColl = pDoc->GetDBCollection();
393
        if ( pColl->SearchName( ScGlobal::GetRscString( STR_DB_NONAME ), nNoNameIndex ) )
394
        if ( pColl->SearchName( pAutoDBRange->GetName(), nNoNameIndex ) )
394
        {
395
        {
395
            ScDBData* pNoNameData = (*pColl)[nNoNameIndex];
396
            ScDBData* pNoNameData = (*pColl)[nNoNameIndex];
396
397
Lines 403-408 Link Here
403
            pDocShell->DBAreaDeleted( nRangeTab, nRangeX1, nRangeY1, nRangeX2, nRangeY2 );
404
            pDocShell->DBAreaDeleted( nRangeTab, nRangeX1, nRangeY1, nRangeX2, nRangeY2 );
404
405
405
            *pNoNameData = *pAutoDBRange;
406
            *pNoNameData = *pAutoDBRange;
407
            /*if (pAutoDBRange->HasQueryParam())   //maybe conflict with AOO
408
            {
409
                ScQueryParam    aParam;
410
                pAutoDBRange->GetQueryParam(aParam);
411
                ScDBDocFunc aDBDocFunc( *pDocShell );
412
                aDBDocFunc.Query( nRangeTab, aParam, NULL, sal_False, sal_False );
413
            }*/
406
414
407
            if ( pAutoDBRange->HasAutoFilter() )
415
            if ( pAutoDBRange->HasAutoFilter() )
408
            {
416
            {
Lines 425-431 Link Here
425
        sal_uInt16 nNoNameIndex;
433
        sal_uInt16 nNoNameIndex;
426
        ScDocument* pDoc = pDocShell->GetDocument();
434
        ScDocument* pDoc = pDocShell->GetDocument();
427
        ScDBCollection* pColl = pDoc->GetDBCollection();
435
        ScDBCollection* pColl = pDoc->GetDBCollection();
428
        if ( pColl->SearchName( ScGlobal::GetRscString( STR_DB_NONAME ), nNoNameIndex ) )
436
        if ( pColl->SearchName( pAutoDBRange->GetName(), nNoNameIndex ) )
429
        {
437
        {
430
            ScDBData* pNoNameData = (*pColl)[nNoNameIndex];
438
            ScDBData* pNoNameData = (*pColl)[nNoNameIndex];
431
439
Lines 435-440 Link Here
435
            SCROW nRangeY2;
443
            SCROW nRangeY2;
436
            SCTAB nRangeTab;
444
            SCTAB nRangeTab;
437
            pNoNameData->GetArea( nRangeTab, nRangeX1, nRangeY1, nRangeX2, nRangeY2 );
445
            pNoNameData->GetArea( nRangeTab, nRangeX1, nRangeY1, nRangeX2, nRangeY2 );
446
            /*if (pAutoDBRange->HasQueryParam())
447
            {
448
                ScQueryParam    aParam;
449
                pAutoDBRange->GetQueryParam(aParam);
450
                SCSIZE nEC = aParam.GetEntryCount();
451
                for (SCSIZE i=0; i<nEC; i++)
452
                    aParam.GetEntry(i).bDoQuery = sal_False;
453
                aParam.bDuplicate = sal_True;
454
                ScDBDocFunc aDBDocFunc( *pDocShell );
455
                aDBDocFunc.Query( nRangeTab, aParam, NULL, sal_False, sal_False );
456
            }*/
438
            pDocShell->DBAreaDeleted( nRangeTab, nRangeX1, nRangeY1, nRangeX2, nRangeY2 );
457
            pDocShell->DBAreaDeleted( nRangeTab, nRangeX1, nRangeY1, nRangeX2, nRangeY2 );
439
458
440
            pNoNameData->SetSortParam( ScSortParam() );
459
            pNoNameData->SetSortParam( ScSortParam() );
(-)sc/source/ui/undo/undoutil.cxx (-2 / +4 lines)
Lines 93-99 Link Here
93
		{
93
		{
94
			String aName;
94
			String aName;
95
			pUndoData->GetName( aName );
95
			pUndoData->GetName( aName );
96
			if ( aName == ScGlobal::GetRscString( STR_DB_NONAME ) )
96
//			if ( aName == ScGlobal::GetRscString( STR_DB_NONAME ) )
97
			if (pUndoData->IsBuildin())
97
				bWasTemp = sal_True;
98
				bWasTemp = sal_True;
98
		}
99
		}
99
        DBG_ASSERT(bWasTemp, "Undo: didn't find database range");
100
        DBG_ASSERT(bWasTemp, "Undo: didn't find database range");
Lines 104-110 Link Here
104
			pRet = (*pColl)[nIndex];
105
			pRet = (*pColl)[nIndex];
105
		else
106
		else
106
		{
107
		{
107
			pRet = new ScDBData( ScGlobal::GetRscString( STR_DB_NONAME ), nTab,
108
            String	aNoNamed = pColl->GetNewDefaultDBName();
109
			pRet = new ScDBData( aNoNamed/*ScGlobal::GetRscString( STR_DB_NONAME )*/, nTab,
108
								nCol1,nRow1, nCol2,nRow2, sal_True,
110
								nCol1,nRow1, nCol2,nRow2, sal_True,
109
								pDoc->HasColHeader( nCol1,nRow1,nCol2,nRow2,nTab ) );
111
								pDoc->HasColHeader( nCol1,nRow1,nCol2,nRow2,nTab ) );
110
			pColl->Insert( pRet );
112
			pColl->Insert( pRet );
(-)sc/source/ui/view/cellsh2.cxx (-5 / +6 lines)
Lines 357-363 Link Here
357
					ScSubTotalParam aSubTotalParam;
357
					ScSubTotalParam aSubTotalParam;
358
					SfxItemSet		aArgSet( GetPool(), SCITEM_SUBTDATA, SCITEM_SUBTDATA );
358
					SfxItemSet		aArgSet( GetPool(), SCITEM_SUBTDATA, SCITEM_SUBTDATA );
359
359
360
					ScDBData* pDBData = pTabViewShell->GetDBData();
360
					//ScDBData* pDBData = pTabViewShell->GetDBData();
361
                    ScDBData* pDBData = pTabViewShell->GetDBData(sal_True, SC_DB_MAKE_SUBTOTAL);
361
					pDBData->GetSubTotalParam( aSubTotalParam );
362
					pDBData->GetSubTotalParam( aSubTotalParam );
362
					aSubTotalParam.bRemoveOnly = sal_False;
363
					aSubTotalParam.bRemoveOnly = sal_False;
363
364
Lines 411-417 Link Here
411
                //#i60401 ux-ctest: Calc does not support all users' strategies regarding sorting data
412
                //#i60401 ux-ctest: Calc does not support all users' strategies regarding sorting data
412
                //the patch comes from maoyg
413
                //the patch comes from maoyg
413
                ScSortParam aSortParam;
414
                ScSortParam aSortParam;
414
                ScDBData*	pDBData = pTabViewShell->GetDBData();
415
                ScDBData*	pDBData = pTabViewShell->GetDBData(sal_True, SC_DB_MAKE_SORT);
415
                ScViewData* pData   = GetViewData();
416
                ScViewData* pData   = GetViewData();
416
417
417
                pDBData->GetSortParam( aSortParam );
418
                pDBData->GetSortParam( aSortParam );
Lines 462-468 Link Here
462
                if ( pArgs )		// Basic
463
                if ( pArgs )		// Basic
463
                {
464
                {
464
                    ScSortParam aSortParam;
465
                    ScSortParam aSortParam;
465
                    ScDBData*	pDBData = pTabViewShell->GetDBData();
466
                    ScDBData*	pDBData = pTabViewShell->GetDBData(sal_True, SC_DB_MAKE_SORT);
466
                    ScViewData* pData   = GetViewData();
467
                    ScViewData* pData   = GetViewData();
467
468
468
                    pDBData->GetSortParam( aSortParam );
469
                    pDBData->GetSortParam( aSortParam );
Lines 525-531 Link Here
525
                else
526
                else
526
                {
527
                {
527
                    ScSortParam aSortParam;
528
                    ScSortParam aSortParam;
528
                    ScDBData*	pDBData = pTabViewShell->GetDBData();
529
                    ScDBData*	pDBData = pTabViewShell->GetDBData(sal_True, SC_DB_MAKE_SORT);
529
                    ScViewData* pData   = GetViewData();
530
                    ScViewData* pData   = GetViewData();
530
531
531
                    pDBData->GetSortParam( aSortParam );
532
                    pDBData->GetSortParam( aSortParam );
Lines 680-686 Link Here
680
		case SID_UNFILTER:
681
		case SID_UNFILTER:
681
			{
682
			{
682
				ScQueryParam aParam;
683
				ScQueryParam aParam;
683
				ScDBData*	 pDBData = pTabViewShell->GetDBData();
684
				ScDBData*	 pDBData = pTabViewShell->GetDBData(sal_True, SC_DB_OLD_FILTER);
684
685
685
				pDBData->GetQueryParam( aParam );
686
				pDBData->GetQueryParam( aParam );
686
				SCSIZE nEC = aParam.GetEntryCount();
687
				SCSIZE nEC = aParam.GetEntryCount();
(-)sc/source/ui/view/dbfunc.cxx (-11 / +20 lines)
Lines 334-368 Link Here
334
334
335
	ScQueryParam	aParam;
335
	ScQueryParam	aParam;
336
	ScDocument*		pDoc	= GetViewData()->GetDocument();
336
	ScDocument*		pDoc	= GetViewData()->GetDocument();
337
	ScDBData*		pDBData = GetDBData( sal_False, SC_DB_MAKE, SC_DBSEL_ROW_DOWN );
337
	ScDBData*		pDBData = GetDBData( sal_False, SC_DB_OLD_FILTER, SC_DBSEL_ROW_DOWN );
338
338
339
	pDBData->SetByRow( sal_True );				//! Undo, vorher abfragen ??
339
	
340
	pDBData->GetQueryParam( aParam );
341
340
342
341
343
	SCCOL  nCol;
342
	SCCOL  nCol;
344
	SCROW  nRow = aParam.nRow1;
343
	SCROW  nRow;
345
	SCTAB  nTab = GetViewData()->GetTabNo();
344
	SCTAB  nTab = GetViewData()->GetTabNo();
346
	sal_Int16   nFlag;
345
	sal_Int16   nFlag;
347
	sal_Bool	bHasAuto = sal_True;
346
	//sal_Bool	bHasAuto = sal_True;
348
	sal_Bool	bHeader  = pDBData->HasHeader();
347
	sal_Bool	bHeader;
349
	sal_Bool	bPaint   = sal_False;
348
	sal_Bool	bPaint   = sal_False;
350
349
351
	//!		stattdessen aus DB-Bereich abfragen?
350
	//!		stattdessen aus DB-Bereich abfragen?
352
351
353
	for (nCol=aParam.nCol1; nCol<=aParam.nCol2 && bHasAuto; nCol++)
352
	/*for (nCol=aParam.nCol1; nCol<=aParam.nCol2 && bHasAuto; nCol++)
354
	{
353
	{
355
		nFlag = ((ScMergeFlagAttr*) pDoc->
354
		nFlag = ((ScMergeFlagAttr*) pDoc->
356
				GetAttr( nCol, nRow, nTab, ATTR_MERGE_FLAG ))->GetValue();
355
				GetAttr( nCol, nRow, nTab, ATTR_MERGE_FLAG ))->GetValue();
357
356
358
		if ( (nFlag & SC_MF_AUTO) == 0 )
357
		if ( (nFlag & SC_MF_AUTO) == 0 )
359
			bHasAuto = sal_False;
358
			bHasAuto = sal_False;
360
	}
359
	}*/
361
360
362
	if (bHasAuto)								// aufheben
361
	if (pDBData && pDBData->HasAutoFilter())								// aufheben
363
	{
362
	{
364
		//	Filterknoepfe ausblenden
363
		//	Filterknoepfe ausblenden
365
364
		pDBData->SetByRow( sal_True );				//! Undo, vorher abfragen ??
365
		pDBData->GetQueryParam( aParam );
366
		nRow = aParam.nRow1;
367
        bHeader = pDBData->HasHeader();
366
		for (nCol=aParam.nCol1; nCol<=aParam.nCol2; nCol++)
368
		for (nCol=aParam.nCol1; nCol<=aParam.nCol2; nCol++)
367
		{
369
		{
368
			nFlag = ((ScMergeFlagAttr*) pDoc->
370
			nFlag = ((ScMergeFlagAttr*) pDoc->
Lines 396-401 Link Here
396
	}
398
	}
397
	else									// Filterknoepfe einblenden
399
	else									// Filterknoepfe einblenden
398
	{
400
	{
401
        pDBData = GetDBData(sal_False, SC_DB_MAKE_FILTER);
402
        pDBData->SetByRow(sal_True);
403
        pDBData->GetQueryParam(aParam);
404
        nRow = aParam.nRow1;
405
        bHeader = pDBData->HasHeader();
406
	
399
		if ( !pDoc->IsBlockEmpty( nTab,
407
		if ( !pDoc->IsBlockEmpty( nTab,
400
								  aParam.nCol1, aParam.nRow1,
408
								  aParam.nCol1, aParam.nRow1,
401
								  aParam.nCol2, aParam.nRow2 ) )
409
								  aParam.nCol2, aParam.nRow2 ) )
Lines 457-463 Link Here
457
	ScDocument* pDoc = pDocSh->GetDocument();
465
	ScDocument* pDoc = pDocSh->GetDocument();
458
466
459
	ScQueryParam aParam;
467
	ScQueryParam aParam;
460
	ScDBData* pDBData = GetDBData( sal_False );
468
	//ScDBData* pDBData = GetDBData( FALSE );
469
    ScDBData* pDBData = GetDBData(sal_False, SC_DB_OLD_FILTER);
461
470
462
	SCTAB nTab;
471
	SCTAB nTab;
463
	SCCOL nCol1, nCol2;
472
	SCCOL nCol1, nCol2;
(-)sc/source/ui/view/tabvwshc.cxx (-2 / +2 lines)
Lines 171-177 Link Here
171
									 SCITEM_QUERYDATA,
171
									 SCITEM_QUERYDATA,
172
									 SCITEM_QUERYDATA );
172
									 SCITEM_QUERYDATA );
173
173
174
			ScDBData* pDBData = GetDBData( sal_True, SC_DB_MAKE, SC_DBSEL_ROW_DOWN);
174
			ScDBData* pDBData = GetDBData( sal_True, SC_DB_MAKE_FILTER, SC_DBSEL_ROW_DOWN);
175
			pDBData->GetQueryParam( aQueryParam );
175
			pDBData->GetQueryParam( aQueryParam );
176
176
177
			ScQueryItem aItem( SCITEM_QUERYDATA, GetViewData(), &aQueryParam );
177
			ScQueryItem aItem( SCITEM_QUERYDATA, GetViewData(), &aQueryParam );
Lines 196-202 Link Here
196
									 SCITEM_QUERYDATA,
196
									 SCITEM_QUERYDATA,
197
									 SCITEM_QUERYDATA );
197
									 SCITEM_QUERYDATA );
198
198
199
			ScDBData* pDBData = GetDBData( sal_True, SC_DB_MAKE, SC_DBSEL_ROW_DOWN);
199
			ScDBData* pDBData = GetDBData( sal_True, SC_DB_MAKE_FILTER, SC_DBSEL_ROW_DOWN);
200
			pDBData->GetQueryParam( aQueryParam );
200
			pDBData->GetQueryParam( aQueryParam );
201
201
202
			aArgSet.Put( ScQueryItem( SCITEM_QUERYDATA,
202
			aArgSet.Put( ScQueryItem( SCITEM_QUERYDATA,

Return to issue 12666