sc/inc/attarray.hxx | 3 +++ sc/inc/column.hxx | 1 + sc/source/core/data/attarray.cxx | 15 +++++++++++++++ sc/source/core/data/column.cxx | 5 +++++ sc/source/core/data/table3.cxx | 6 ++---- sc/source/ui/dbgui/tpsort.cxx | 21 ++++++++++++++++++++- 6 files changed, 46 insertions(+), 5 deletions(-)
New commits: commit 0234b73de28098fc1cd37b55471ef924d2b584cc Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Fri Jul 13 08:16:57 2012 +0200 don't use wrong sort direction in some cases diff --git a/sc/source/ui/dbgui/tpsort.cxx b/sc/source/ui/dbgui/tpsort.cxx index 303d6c6..3dccaa0 100644 --- a/sc/source/ui/dbgui/tpsort.cxx +++ b/sc/source/ui/dbgui/tpsort.cxx @@ -227,6 +227,17 @@ sal_Bool ScTabPageSortFields::FillItemSet( SfxItemSet& rArgSet ) { ScSortParam aNewSortData = aSortData; + if (pDlg) + { + const SfxItemSet* pExample = pDlg->GetExampleSet(); + const SfxPoolItem* pItem; + if ( pExample && pExample->GetItemState( nWhichSort, sal_True, &pItem ) == SFX_ITEM_SET ) + { + ScSortParam aTempData = static_cast<const ScSortItem*>(pItem)->GetSortData(); + aTempData.maKeyState = aNewSortData.maKeyState; + aNewSortData = aTempData; + } + } std::vector<sal_uInt16> nSortPos; for ( sal_uInt16 i=0; i<nSortKeyCount; i++ ) @@ -624,7 +635,8 @@ void ScTabPageSortOptions::Init() // ----------------------------------------------------------------------- -SfxTabPage* ScTabPageSortOptions::Create( Window* pParent, +SfxTabPage* ScTabPageSortOptions::Create( + Window* pParent, const SfxItemSet& rArgSet ) { return ( new ScTabPageSortOptions( pParent, rArgSet ) ); @@ -707,6 +719,13 @@ sal_Bool ScTabPageSortOptions::FillItemSet( SfxItemSet& rArgSet ) // Create local copy of ScParam ScSortParam aNewSortData = aSortData; + if (pDlg) + { + const SfxItemSet* pExample = pDlg->GetExampleSet(); + const SfxPoolItem* pItem; + if ( pExample && pExample->GetItemState( nWhichSort, sal_True, &pItem ) == SFX_ITEM_SET ) + aNewSortData = static_cast<const ScSortItem*>(pItem)->GetSortData(); + } aNewSortData.bByRow = aBtnTopDown.IsChecked(); aNewSortData.bHasHeader = aBtnHeader.IsChecked(); aNewSortData.bCaseSens = aBtnCase.IsChecked(); commit 902082656655aeab559c0b5781907ff004179468 Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Fri Jul 13 08:17:26 2012 +0200 don't delete ScPatternAttr from doc pool for swap, i#118877 the original apache commit is quite ugly and should not be used!! Change-Id: Id02d2cf474e49b97bfe285fe76867d1b1d944ec3 diff --git a/sc/inc/attarray.hxx b/sc/inc/attarray.hxx index 9b81440..6ce325a 100644 --- a/sc/inc/attarray.hxx +++ b/sc/inc/attarray.hxx @@ -131,6 +131,9 @@ public: void SetPattern( SCROW nRow, const ScPatternAttr* pPattern, bool bPutToPool = false ); void SetPatternArea( SCROW nStartRow, SCROW nEndRow, const ScPatternAttr* pPattern, bool bPutToPool = false, ScEditDataArray* pDataArray = NULL ); + + //swap two column patterns without adding and removing them from the pool + void SwapPattern( ScAttrArray& pArray2, SCROW nRow1, SCROW nRow2, const ScPatternAttr* pPattern1, const ScPatternAttr* pPattern2 ); void ApplyStyleArea( SCROW nStartRow, SCROW nEndRow, ScStyleSheet* pStyle ); void ApplyCacheArea( SCROW nStartRow, SCROW nEndRow, SfxItemPoolCache* pCache, ScEditDataArray* pDataArray = NULL ); diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx index 6f776e1..49ab814 100644 --- a/sc/inc/column.hxx +++ b/sc/inc/column.hxx @@ -307,6 +307,7 @@ public: ScEditDataArray* pDataArray = NULL ); bool SetAttrEntries(ScAttrEntry* pData, SCSIZE nSize); void SetPattern( SCROW nRow, const ScPatternAttr& rPatAttr, bool bPutToPool = false ); + void SwapPattern( ScColumn& rCol, SCROW nRow1, SCROW nRow2, const ScPatternAttr& rPatAttr1, const ScPatternAttr& rPatAttr2 ); void SetPatternArea( SCROW nStartRow, SCROW nEndRow, const ScPatternAttr& rPatAttr, bool bPutToPool = false ); void ApplyPatternIfNumberformatIncompatible( const ScRange& rRange, diff --git a/sc/source/core/data/attarray.cxx b/sc/source/core/data/attarray.cxx index 6cf487f..e166ea2 100644 --- a/sc/source/core/data/attarray.cxx +++ b/sc/source/core/data/attarray.cxx @@ -483,6 +483,21 @@ void ScAttrArray::SetPatternArea(SCROW nStartRow, SCROW nEndRow, const ScPattern #endif } +void ScAttrArray::SwapPattern( ScAttrArray& rArray2, SCROW nRow1, SCROW nRow2, const ScPatternAttr* pPattern1, const ScPatternAttr* pPattern2) +{ + if(!VALIDROW(nRow1) || !VALIDROW(nRow2)) + return; + + SCSIZE nIndex1 = 0; + SCSIZE nIndex2 = 0; + Search(nRow1, nIndex1); + rArray2.Search(nRow2, nIndex2); + pData[nIndex1].pPattern = pPattern1; + rArray2.pData[nIndex2].pPattern = pPattern2; + + if (pDocument->IsStreamValid(nTab)) + pDocument->SetStreamValid(nTab, false); +} void ScAttrArray::ApplyStyleArea( SCROW nStartRow, SCROW nEndRow, ScStyleSheet* pStyle ) { diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx index db99462..adc5eb2 100644 --- a/sc/source/core/data/column.cxx +++ b/sc/source/core/data/column.cxx @@ -652,6 +652,11 @@ void ScColumn::SetPattern( SCROW nRow, const ScPatternAttr& rPatAttr, bool bPutT pAttrArray->SetPattern( nRow, &rPatAttr, bPutToPool ); } +void ScColumn::SwapPattern( ScColumn& rCol2, SCROW nRow1, SCROW nRow2, const ScPatternAttr& rPatAttr1, const ScPatternAttr& rPatAttr2 ) +{ + pAttrArray->SwapPattern( *rCol2.pAttrArray, nRow1, nRow2, &rPatAttr1, &rPatAttr2 ); +} + void ScColumn::SetPatternArea( SCROW nStartRow, SCROW nEndRow, const ScPatternAttr& rPatAttr, bool bPutToPool ) diff --git a/sc/source/core/data/table3.cxx b/sc/source/core/data/table3.cxx index 85354f3..6a140cd 100644 --- a/sc/source/core/data/table3.cxx +++ b/sc/source/core/data/table3.cxx @@ -571,8 +571,7 @@ void ScTable::SwapCol(SCCOL nCol1, SCCOL nCol2) const ScPatternAttr* pPat2 = GetPattern(nCol2, nRow); if (pPat1 != pPat2) { - SetPattern(nCol1, nRow, *pPat2, true); - SetPattern(nCol2, nRow, *pPat1, true); + aCol[nCol1].SwapPattern(aCol[nCol2], nRow, nRow, *pPat1, *pPat2); } } } @@ -623,8 +622,7 @@ void ScTable::SwapRow(SCROW nRow1, SCROW nRow2) const ScPatternAttr* pPat2 = GetPattern(nCol, nRow2); if (pPat1 != pPat2) { - SetPattern(nCol, nRow1, *pPat2, true); - SetPattern(nCol, nRow2, *pPat1, true); + aCol[nCol].SwapPattern(aCol[nCol], nRow1, nRow2, *pPat1, *pPat2); } } } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits