[Libreoffice-commits] core.git: Branch 'private/kohei/sort-ref-update' - sc/inc sc/source
Kohei Yoshida
kohei.yoshida at collabora.com
Fri Jun 27 18:01:14 PDT 2014
sc/inc/document.hxx | 4 +++-
sc/inc/sortparam.hxx | 3 +--
sc/inc/table.hxx | 10 ++++++----
sc/inc/undosort.hxx | 4 ++--
sc/source/core/data/documen3.cxx | 14 +++++++++++++-
sc/source/core/data/table3.cxx | 37 ++++++++++++++++++++++++++++++-------
sc/source/ui/docshell/dbdocfun.cxx | 2 +-
sc/source/ui/undo/undosort.cxx | 4 +++-
8 files changed, 59 insertions(+), 19 deletions(-)
New commits:
commit 80b93eeac80b902fe83dd8aa4b4c375462df3d91
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Fri Jun 27 21:00:38 2014 -0400
More tweaking...
Change-Id: I9276fd92a90dc2689bd59b2ed7eef3d7267ff5b8
diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index 848e162..fef0683 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -1676,7 +1676,9 @@ public:
SC_DLLPUBLIC SvNumberFormatter* GetFormatTable() const;
SC_DLLPUBLIC SvNumberFormatter* CreateFormatTable() const;
- void Sort( SCTAB nTab, const ScSortParam& rSortParam, bool bKeepQuery, ScProgress* pProgress, sc::SortUndoParam* pUndo );
+ void Sort( SCTAB nTab, const ScSortParam& rSortParam, bool bKeepQuery, ScProgress* pProgress, sc::ReorderParam* pUndo );
+ void Reorder( const sc::ReorderParam& rParam, ScProgress* pProgress );
+
SCSIZE Query( SCTAB nTab, const ScQueryParam& rQueryParam, bool bKeepSub );
SC_DLLPUBLIC bool CreateQueryParam( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
SCTAB nTab, ScQueryParam& rQueryParam );
diff --git a/sc/inc/sortparam.hxx b/sc/inc/sortparam.hxx
index df3a449..83a1c34 100644
--- a/sc/inc/sortparam.hxx
+++ b/sc/inc/sortparam.hxx
@@ -80,11 +80,10 @@ struct SC_DLLPUBLIC ScSortParam
namespace sc {
-struct SC_DLLPUBLIC SortUndoParam
+struct SC_DLLPUBLIC ReorderParam
{
ScRange maSortRange;
std::vector<SCCOLROW> maOldIndices;
- bool mbHasHeader;
bool mbByRow;
bool mbIncludePattern;
};
diff --git a/sc/inc/table.hxx b/sc/inc/table.hxx
index 649d8e6..9f0cff2 100644
--- a/sc/inc/table.hxx
+++ b/sc/inc/table.hxx
@@ -73,7 +73,7 @@ class RowHeightContext;
class CompileFormulaContext;
struct SetFormulaDirtyContext;
class RefMovedHint;
-struct SortUndoParam;
+struct ReorderParam;
}
@@ -826,7 +826,9 @@ public:
void ExtendHidden( SCCOL& rX1, SCROW& rY1, SCCOL& rX2, SCROW& rY2 );
void Sort(
- const ScSortParam& rSortParam, bool bKeepQuery, ScProgress* pProgress, sc::SortUndoParam* pUndo );
+ const ScSortParam& rSortParam, bool bKeepQuery, ScProgress* pProgress, sc::ReorderParam* pUndo );
+ void Reorder( const sc::ReorderParam& rParam, ScProgress* pProgress );
+
bool ValidQuery(
SCROW nRow, const ScQueryParam& rQueryParam, ScRefCellValue* pCell = NULL,
bool* pbTestEqualCondition = NULL);
@@ -1021,8 +1023,8 @@ private:
short Compare( ScSortInfoArray*, SCCOLROW nIndex1, SCCOLROW nIndex2) const;
ScSortInfoArray* CreateSortInfoArray( SCCOLROW nInd1, SCCOLROW nInd2, bool bKeepQuery );
void QuickSort( ScSortInfoArray*, SCsCOLROW nLo, SCsCOLROW nHi);
- void SortReorderByColumn( ScSortInfoArray* pArray, ScProgress* pProgress, sc::SortUndoParam* pUndo );
- void SortReorderByRow( ScSortInfoArray* pArray, ScProgress* pProgress, sc::SortUndoParam* pUndo );
+ void SortReorderByColumn( ScSortInfoArray* pArray, ScProgress* pProgress );
+ void SortReorderByRow( ScSortInfoArray* pArray, ScProgress* pProgress );
bool CreateExcelQuery(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, ScQueryParam& rQueryParam);
bool CreateStarQuery(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, ScQueryParam& rQueryParam);
diff --git a/sc/inc/undosort.hxx b/sc/inc/undosort.hxx
index d7a4512..fb8fbeb 100644
--- a/sc/inc/undosort.hxx
+++ b/sc/inc/undosort.hxx
@@ -17,10 +17,10 @@ namespace sc {
class UndoSort : public ScSimpleUndo
{
- SortUndoParam maParam;
+ ReorderParam maParam;
public:
- UndoSort( ScDocShell* pDocSh, const SortUndoParam& rParam );
+ UndoSort( ScDocShell* pDocSh, const ReorderParam& rParam );
virtual OUString GetComment() const;
virtual void Undo();
diff --git a/sc/source/core/data/documen3.cxx b/sc/source/core/data/documen3.cxx
index 38162ce..1486092 100644
--- a/sc/source/core/data/documen3.cxx
+++ b/sc/source/core/data/documen3.cxx
@@ -1336,7 +1336,7 @@ bool ScDocument::UpdateOutlineRow( SCROW nStartRow, SCROW nEndRow, SCTAB nTab, b
}
void ScDocument::Sort(
- SCTAB nTab, const ScSortParam& rSortParam, bool bKeepQuery, ScProgress* pProgress, sc::SortUndoParam* pUndo )
+ SCTAB nTab, const ScSortParam& rSortParam, bool bKeepQuery, ScProgress* pProgress, sc::ReorderParam* pUndo )
{
if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] )
{
@@ -1347,6 +1347,18 @@ void ScDocument::Sort(
}
}
+void ScDocument::Reorder( const sc::ReorderParam& rParam, ScProgress* pProgress )
+{
+ ScTable* pTab = FetchTable(rParam.maSortRange.aStart.Tab());
+ if (!pTab)
+ return;
+
+ bool bOldEnableIdle = IsIdleEnabled();
+ EnableIdle(false);
+ pTab->Reorder(rParam, pProgress);
+ EnableIdle(bOldEnableIdle);
+}
+
SCSIZE ScDocument::Query(SCTAB nTab, const ScQueryParam& rQueryParam, bool bKeepSub)
{
if ( ValidTab(nTab) && nTab < static_cast<SCTAB>(maTabs.size()) && maTabs[nTab] )
diff --git a/sc/source/core/data/table3.cxx b/sc/source/core/data/table3.cxx
index 1283ee1..e83f86f 100644
--- a/sc/source/core/data/table3.cxx
+++ b/sc/source/core/data/table3.cxx
@@ -560,8 +560,7 @@ public:
}
-void ScTable::SortReorderByColumn(
- ScSortInfoArray* pArray, ScProgress* pProgress, sc::SortUndoParam* pUndo )
+void ScTable::SortReorderByColumn( ScSortInfoArray* pArray, ScProgress* pProgress )
{
size_t nCount = pArray->GetCount();
SCCOLROW nStart = pArray->GetStart();
@@ -638,8 +637,7 @@ void ScTable::SortReorderByColumn(
}
}
-void ScTable::SortReorderByRow(
- ScSortInfoArray* pArray, ScProgress* pProgress, sc::SortUndoParam* pUndo )
+void ScTable::SortReorderByRow( ScSortInfoArray* pArray, ScProgress* pProgress )
{
SCROW nRow1 = pArray->GetStart();
SCROW nRow2 = pArray->GetLast();
@@ -1093,11 +1091,19 @@ void ScTable::DecoladeRow( ScSortInfoArray* pArray, SCROW nRow1, SCROW nRow2 )
}
void ScTable::Sort(
- const ScSortParam& rSortParam, bool bKeepQuery, ScProgress* pProgress, sc::SortUndoParam* pUndo )
+ const ScSortParam& rSortParam, bool bKeepQuery, ScProgress* pProgress, sc::ReorderParam* pUndo )
{
aSortParam = rSortParam;
InitSortCollator( rSortParam );
bGlobalKeepQuery = bKeepQuery;
+
+ if (pUndo)
+ {
+ // Copy over the basic sort parameters.
+ pUndo->mbByRow = rSortParam.bByRow;
+ pUndo->mbIncludePattern = rSortParam.bIncludePattern;
+ }
+
if (rSortParam.bByRow)
{
SCROW nLastRow = 0;
@@ -1117,7 +1123,13 @@ void ScTable::Sort(
DecoladeRow(pArray.get(), nRow1, nLastRow);
QuickSort(pArray.get(), nRow1, nLastRow);
- SortReorderByRow(pArray.get(), pProgress, pUndo);
+ SortReorderByRow(pArray.get(), pProgress);
+
+ if (pUndo)
+ {
+ pUndo->maSortRange = ScRange(rSortParam.nCol1, nRow1, nTab, rSortParam.nCol2, nLastRow, nTab);
+ pUndo->maOldIndices = pArray->GetOldIndices();
+ }
// #i59745# update position of caption objects of cell notes --> reported at (SortReorder) ScColumn::SwapCellNotes level
}
@@ -1139,7 +1151,13 @@ void ScTable::Sort(
boost::scoped_ptr<ScSortInfoArray> pArray(CreateSortInfoArray(nCol1, nLastCol, bKeepQuery));
QuickSort(pArray.get(), nCol1, nLastCol);
- SortReorderByColumn(pArray.get(), pProgress, pUndo);
+ SortReorderByColumn(pArray.get(), pProgress);
+
+ if (pUndo)
+ {
+ pUndo->maSortRange = ScRange(nCol1, aSortParam.nRow1, nTab, nLastCol, aSortParam.nRow2, nTab);
+ pUndo->maOldIndices = pArray->GetOldIndices();
+ }
// #i59745# update position of caption objects of cell notes --> reported at (SortReorder) ScColumn::SwapCellNotes level
}
@@ -1147,6 +1165,11 @@ void ScTable::Sort(
DestroySortCollator();
}
+void ScTable::Reorder( const sc::ReorderParam& rParam, ScProgress* pProgress )
+{
+
+}
+
namespace {
class SubTotalRowFinder
diff --git a/sc/source/ui/docshell/dbdocfun.cxx b/sc/source/ui/docshell/dbdocfun.cxx
index a57809b..9d7f316 100644
--- a/sc/source/ui/docshell/dbdocfun.cxx
+++ b/sc/source/ui/docshell/dbdocfun.cxx
@@ -592,7 +592,7 @@ bool ScDBDocFunc::Sort( SCTAB nTab, const ScSortParam& rSortParam,
}
#endif
- sc::SortUndoParam aUndoParam;
+ sc::ReorderParam aUndoParam;
// don't call ScDocument::Sort with an empty SortParam (may be empty here if bCopy is set)
if (aLocalParam.GetSortKeyCount() && aLocalParam.maKeyState[0].bDoSort)
diff --git a/sc/source/ui/undo/undosort.cxx b/sc/source/ui/undo/undosort.cxx
index 09671bc..1258882 100644
--- a/sc/source/ui/undo/undosort.cxx
+++ b/sc/source/ui/undo/undosort.cxx
@@ -13,7 +13,7 @@
namespace sc {
-UndoSort::UndoSort( ScDocShell* pDocSh, const SortUndoParam& rParam ) :
+UndoSort::UndoSort( ScDocShell* pDocSh, const ReorderParam& rParam ) :
ScSimpleUndo(pDocSh), maParam(rParam) {}
OUString UndoSort::GetComment() const
@@ -23,6 +23,8 @@ OUString UndoSort::GetComment() const
void UndoSort::Undo()
{
+ ScDocument& rDoc = pDocShell->GetDocument();
+ rDoc.Reorder(maParam, NULL);
}
void UndoSort::Redo()
More information about the Libreoffice-commits
mailing list