parent
609b7934db
commit
0e560ad933
@ -0,0 +1,248 @@
|
||||
From 77c6ce66696a997269b9fe4dfed1dc2e51ecd00e Mon Sep 17 00:00:00 2001
|
||||
From: Michael Meeks <michael.meeks@collabora.com>
|
||||
Date: Fri, 10 Oct 2014 13:00:35 +0100
|
||||
Subject: [PATCH] Adapt sorting unit tests for new default.
|
||||
|
||||
Change-Id: I9885e2712753390f0597233c404ab80c0ad2b537
|
||||
Reviewed-on: https://gerrit.libreoffice.org/11904
|
||||
Reviewed-by: Muthu Subramanian K <muthusuba@gmail.com>
|
||||
Reviewed-by: Eike Rathke <erack@redhat.com>
|
||||
Tested-by: Eike Rathke <erack@redhat.com>
|
||||
---
|
||||
sc/Library_scqahelper.mk | 2 +-
|
||||
sc/qa/unit/filters-test.cxx | 9 +++++++
|
||||
sc/qa/unit/helper/sorthelper.hxx | 55 ++++++++++++++++++++++++++++++++++++++++
|
||||
sc/qa/unit/ucalc_sort.cxx | 26 ++++++++++++++-----
|
||||
4 files changed, 85 insertions(+), 7 deletions(-)
|
||||
create mode 100644 sc/qa/unit/helper/sorthelper.hxx
|
||||
|
||||
diff --git a/sc/Library_scqahelper.mk b/sc/Library_scqahelper.mk
|
||||
index 351b115..912d5f8 100644
|
||||
--- a/sc/Library_scqahelper.mk
|
||||
+++ b/sc/Library_scqahelper.mk
|
||||
@@ -46,7 +46,7 @@ $(eval $(call gb_Library_use_libraries,scqahelper,\
|
||||
svl \
|
||||
svt \
|
||||
svx \
|
||||
- svxcore \
|
||||
+ svxcore \
|
||||
test \
|
||||
tl \
|
||||
unotest \
|
||||
diff --git a/sc/qa/unit/filters-test.cxx b/sc/qa/unit/filters-test.cxx
|
||||
index 0ea9f85..596f3fa 100644
|
||||
--- a/sc/qa/unit/filters-test.cxx
|
||||
+++ b/sc/qa/unit/filters-test.cxx
|
||||
@@ -21,6 +21,7 @@
|
||||
#include <svl/stritem.hxx>
|
||||
|
||||
#include "helper/qahelper.hxx"
|
||||
+#include "helper/sorthelper.hxx"
|
||||
|
||||
#include "docsh.hxx"
|
||||
#include "postit.hxx"
|
||||
@@ -549,6 +550,13 @@ void ScFiltersTest::testEnhancedProtectionXLSX()
|
||||
|
||||
void ScFiltersTest::testSortWithSharedFormulasODS()
|
||||
{
|
||||
+#if 0
|
||||
+ // This guy is a nightmare - he requires a ton of internal /
|
||||
+ // private API from sc - that has a huge knock-on effect on
|
||||
+ // filters-test linking etc. etc. - urgh ... surely we should
|
||||
+ // test this just in ucalc - review appreciated Eike ...
|
||||
+ SortRefUpdateSetter aUpdateSet;
|
||||
+
|
||||
ScDocShellRef xDocSh = loadDoc("shared-formula/sort-crash.", ODS, true);
|
||||
CPPUNIT_ASSERT(xDocSh.Is());
|
||||
ScDocument* pDoc = xDocSh->GetDocument();
|
||||
@@ -594,6 +602,7 @@ void ScFiltersTest::testSortWithSharedFormulasODS()
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<SCROW>(15), pFC->GetSharedLength());
|
||||
|
||||
xDocSh->DoClose();
|
||||
+#endif
|
||||
}
|
||||
|
||||
ScFiltersTest::ScFiltersTest()
|
||||
diff --git a/sc/qa/unit/helper/sorthelper.hxx b/sc/qa/unit/helper/sorthelper.hxx
|
||||
new file mode 100644
|
||||
index 0000000..e82b8c2
|
||||
--- /dev/null
|
||||
+++ b/sc/qa/unit/helper/sorthelper.hxx
|
||||
@@ -0,0 +1,55 @@
|
||||
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
+/*
|
||||
+ * This file is part of the LibreOffice project.
|
||||
+ *
|
||||
+ * This Source Code Form is subject to the terms of the Mozilla Public
|
||||
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
+ */
|
||||
+
|
||||
+#ifndef INCLUDED_SC_QA_SORT_HELPER_QAHELPER_HXX
|
||||
+#define INCLUDED_SC_QA_SORT_HELPER_QAHELPER_HXX
|
||||
+
|
||||
+// Unfortunately requires linkage to sc/ internals so
|
||||
+// can't live in qahelper itself.
|
||||
+#include "inputopt.hxx"
|
||||
+
|
||||
+/**
|
||||
+ * Temporarily set the sorting type.
|
||||
+ */
|
||||
+class SortTypeSetter {
|
||||
+ bool mbSortRefUpdate;
|
||||
+public:
|
||||
+ SortTypeSetter(bool bSortRefUpdate)
|
||||
+ {
|
||||
+ mbSortRefUpdate = changeTo(bSortRefUpdate);
|
||||
+ }
|
||||
+ bool changeTo(bool bSortRefUpdate)
|
||||
+ {
|
||||
+ ScInputOptions aInputOptions = SC_MOD()->GetInputOptions();
|
||||
+ bool bRet = aInputOptions.GetSortRefUpdate();
|
||||
+ aInputOptions.SetSortRefUpdate(bSortRefUpdate);
|
||||
+ SC_MOD()->SetInputOptions(aInputOptions);
|
||||
+ return bRet;
|
||||
+ }
|
||||
+ virtual ~SortTypeSetter()
|
||||
+ {
|
||||
+ changeTo(mbSortRefUpdate);
|
||||
+ }
|
||||
+};
|
||||
+
|
||||
+class SortRefNoUpdateSetter : private SortTypeSetter
|
||||
+{
|
||||
+public:
|
||||
+ SortRefNoUpdateSetter() : SortTypeSetter(false) {}
|
||||
+};
|
||||
+
|
||||
+class SortRefUpdateSetter : private SortTypeSetter
|
||||
+{
|
||||
+public:
|
||||
+ SortRefUpdateSetter() : SortTypeSetter(true) {}
|
||||
+};
|
||||
+
|
||||
+#endif
|
||||
+
|
||||
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
||||
diff --git a/sc/qa/unit/ucalc_sort.cxx b/sc/qa/unit/ucalc_sort.cxx
|
||||
index f81a394..ce6b9b3 100644
|
||||
--- a/sc/qa/unit/ucalc_sort.cxx
|
||||
+++ b/sc/qa/unit/ucalc_sort.cxx
|
||||
@@ -8,6 +8,7 @@
|
||||
*/
|
||||
|
||||
#include "ucalc.hxx"
|
||||
+#include "helper/sorthelper.hxx"
|
||||
|
||||
#include <postit.hxx>
|
||||
#include <sortparam.hxx>
|
||||
@@ -18,7 +19,6 @@
|
||||
#include <globalnames.hxx>
|
||||
#include <dbdocfun.hxx>
|
||||
#include <scitems.hxx>
|
||||
-#include <inputopt.hxx>
|
||||
#include <editutil.hxx>
|
||||
|
||||
#include <sal/config.h>
|
||||
@@ -117,6 +117,8 @@ void Test::testSort()
|
||||
|
||||
void Test::testSortHorizontal()
|
||||
{
|
||||
+ SortRefUpdateSetter aUpdateSet;
|
||||
+
|
||||
ScFormulaOptions aOptions;
|
||||
aOptions.SetFormulaSepArg(";");
|
||||
aOptions.SetFormulaSepArrayCol(";");
|
||||
@@ -361,6 +363,8 @@ void Test::testSortSingleRow()
|
||||
// if cells in the sort are referenced by formulas
|
||||
void Test::testSortWithFormulaRefs()
|
||||
{
|
||||
+ SortRefUpdateSetter aUpdateSet;
|
||||
+
|
||||
m_pDoc->InsertTab(0, "List1");
|
||||
m_pDoc->InsertTab(1, "List2");
|
||||
|
||||
@@ -460,6 +464,8 @@ void Test::testSortWithStrings()
|
||||
|
||||
void Test::testSortInFormulaGroup()
|
||||
{
|
||||
+ SortRefUpdateSetter aUpdateSet;
|
||||
+
|
||||
static struct {
|
||||
SCCOL nCol;
|
||||
SCROW nRow;
|
||||
@@ -691,6 +697,8 @@ void Test::testSortWithCellFormats()
|
||||
|
||||
void Test::testSortRefUpdate()
|
||||
{
|
||||
+ SortTypeSetter aSortTypeSet(true);
|
||||
+
|
||||
sc::AutoCalcSwitch aACSwitch(*m_pDoc, true); // turn auto calc on.
|
||||
FormulaGrammarSwitch aFGSwitch(m_pDoc, formula::FormulaGrammar::GRAM_ENGLISH_XL_R1C1);
|
||||
|
||||
@@ -811,8 +819,7 @@ void Test::testSortRefUpdate()
|
||||
m_pDoc->SetString(ScAddress(2,1+i,0), "=RC[-2]");
|
||||
|
||||
// Turn off reference update on sort.
|
||||
- ScInputOptions aInputOption = SC_MOD()->GetInputOptions();
|
||||
- aInputOption.SetSortRefUpdate(false);
|
||||
+ aSortTypeSet.changeTo(false);
|
||||
|
||||
bSorted = aFunc.Sort(0, aSortData, true, true, true);
|
||||
CPPUNIT_ASSERT(bSorted);
|
||||
@@ -837,14 +844,13 @@ void Test::testSortRefUpdate()
|
||||
CPPUNIT_ASSERT_EQUAL(fCheck, m_pDoc->GetValue(ScAddress(2,i+1,0))); // column C
|
||||
}
|
||||
|
||||
- // Turn it back on.
|
||||
- aInputOption.SetSortRefUpdate(true);
|
||||
-
|
||||
m_pDoc->DeleteTab(0);
|
||||
}
|
||||
|
||||
void Test::testSortRefUpdate2()
|
||||
{
|
||||
+ SortRefUpdateSetter aUpdateSet;
|
||||
+
|
||||
sc::AutoCalcSwitch aACSwitch(*m_pDoc, true); // turn auto calc on.
|
||||
FormulaGrammarSwitch aFGSwitch(m_pDoc, formula::FormulaGrammar::GRAM_ENGLISH_XL_R1C1);
|
||||
|
||||
@@ -932,6 +938,8 @@ void Test::testSortRefUpdate2()
|
||||
|
||||
void Test::testSortRefUpdate3()
|
||||
{
|
||||
+ SortRefUpdateSetter aUpdateSet;
|
||||
+
|
||||
sc::AutoCalcSwitch aACSwitch(*m_pDoc, true); // turn auto calc on.
|
||||
m_pDoc->InsertTab(0, "Sort");
|
||||
|
||||
@@ -1020,6 +1028,8 @@ void Test::testSortRefUpdate3()
|
||||
// testRefInterne.ods
|
||||
void Test::testSortRefUpdate4()
|
||||
{
|
||||
+ SortRefUpdateSetter aUpdateSet;
|
||||
+
|
||||
sc::AutoCalcSwitch aACSwitch(*m_pDoc, true); // turn auto calc on.
|
||||
m_pDoc->InsertTab(0, "Sort");
|
||||
m_pDoc->InsertTab(1, "Lesson1");
|
||||
@@ -1217,6 +1227,8 @@ void Test::testSortRefUpdate4()
|
||||
* before midnight, ermm.. */
|
||||
void Test::testSortRefUpdate5()
|
||||
{
|
||||
+ SortRefUpdateSetter aUpdateSet;
|
||||
+
|
||||
sc::AutoCalcSwitch aACSwitch(*m_pDoc, true); // turn auto calc on.
|
||||
m_pDoc->InsertTab(0, "Sort");
|
||||
|
||||
@@ -1388,6 +1400,8 @@ void Test::testSortOutOfPlaceResult()
|
||||
|
||||
void Test::testSortPartialFormulaGroup()
|
||||
{
|
||||
+ SortRefUpdateSetter aUpdateSet;
|
||||
+
|
||||
sc::AutoCalcSwitch aACSwitch(*m_pDoc, true); // turn auto calc on.
|
||||
FormulaGrammarSwitch aFGSwitch(m_pDoc, formula::FormulaGrammar::GRAM_ENGLISH_XL_R1C1);
|
||||
|
||||
--
|
||||
1.9.3
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,40 @@
|
||||
From b35c51d15189835bd388411f9ab4baefacd7b460 Mon Sep 17 00:00:00 2001
|
||||
From: Kohei Yoshida <kohei.yoshida@collabora.com>
|
||||
Date: Fri, 17 Oct 2014 21:48:31 -0400
|
||||
Subject: [PATCH] fdo#80284: Avoid broadcasting during cell delete & shift.
|
||||
|
||||
Broadcasting it here and marking formula cells dirty prevents them
|
||||
from being entered into the formula tree at the end. They get marked
|
||||
"postponed dirty" during reference update, and are supposed to be
|
||||
set dirty at the end.
|
||||
|
||||
Change-Id: I65977300ee4ee26b6166d170acd2145abcbbf288
|
||||
(cherry picked from commit 7fef943114b9184e69c8c714bf158116b8d9caf7)
|
||||
Reviewed-on: https://gerrit.libreoffice.org/12014
|
||||
Reviewed-by: Eike Rathke <erack@redhat.com>
|
||||
Tested-by: Eike Rathke <erack@redhat.com>
|
||||
---
|
||||
sc/source/core/data/table2.cxx | 7 ++-----
|
||||
1 file changed, 2 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx
|
||||
index 9abd954..9b4fd02 100644
|
||||
--- a/sc/source/core/data/table2.cxx
|
||||
+++ b/sc/source/core/data/table2.cxx
|
||||
@@ -391,11 +391,8 @@ void ScTable::DeleteCol(
|
||||
}
|
||||
}
|
||||
|
||||
- { // scope for bulk broadcast
|
||||
- ScBulkBroadcast aBulkBroadcast( pDocument->GetBASM());
|
||||
- for (SCSIZE i = 0; i < nSize; i++)
|
||||
- aCol[nStartCol + i].DeleteArea(nStartRow, nEndRow, IDF_ALL);
|
||||
- }
|
||||
+ for (SCSIZE i = 0; i < nSize; i++)
|
||||
+ aCol[nStartCol + i].DeleteArea(nStartRow, nEndRow, IDF_ALL, false);
|
||||
|
||||
if ((nStartRow == 0) && (nEndRow == MAXROW))
|
||||
{
|
||||
--
|
||||
1.9.3
|
||||
|
@ -0,0 +1,80 @@
|
||||
From eb5f25984307cd9e63e9cc88cbdb09228d66b097 Mon Sep 17 00:00:00 2001
|
||||
From: Kohei Yoshida <kohei.yoshida@collabora.com>
|
||||
Date: Sat, 11 Oct 2014 14:18:10 -0400
|
||||
Subject: [PATCH] fdo#80846: Broadcast changes before EndUndo().
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
EndUndo() calls PostDataChanged(), which renders the recalculated formula
|
||||
cells. Not broadcasting before EndUndo causes some dependent formula
|
||||
cells to not get recalculated.
|
||||
|
||||
This one unfortunately is not currently unit-testable as this behavior
|
||||
depends on the presence of ScTabViewShell....
|
||||
|
||||
Change-Id: I86288608b7f2627cda7c74be27a18029832775ef
|
||||
(cherry picked from commit 424bfaa773e58d6b609ac7f64907db4b542d1315)
|
||||
Reviewed-on: https://gerrit.libreoffice.org/11927
|
||||
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
|
||||
Tested-by: Caolán McNamara <caolanm@redhat.com>
|
||||
---
|
||||
sc/source/ui/undo/undoblk3.cxx | 23 +++++++++--------------
|
||||
1 file changed, 9 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/sc/source/ui/undo/undoblk3.cxx b/sc/source/ui/undo/undoblk3.cxx
|
||||
index 03edabf..6784134 100644
|
||||
--- a/sc/source/ui/undo/undoblk3.cxx
|
||||
+++ b/sc/source/ui/undo/undoblk3.cxx
|
||||
@@ -170,12 +170,20 @@ void ScUndoDeleteContents::DoChange( const bool bUndo )
|
||||
SetChangeTrack();
|
||||
}
|
||||
|
||||
+ if (nFlags & IDF_CONTENTS)
|
||||
+ {
|
||||
+ // Broadcast only when the content changes. fdo#74687
|
||||
+ if (mpDataSpans)
|
||||
+ BroadcastChanges(*mpDataSpans);
|
||||
+ else
|
||||
+ BroadcastChanges(aRange);
|
||||
+ }
|
||||
+
|
||||
ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
|
||||
if ( !( (pViewShell) && pViewShell->AdjustRowHeight(
|
||||
aRange.aStart.Row(), aRange.aEnd.Row() ) ) )
|
||||
/*A*/ pDocShell->PostPaint( aRange, PAINT_GRID | PAINT_EXTRAS, nExtFlags );
|
||||
|
||||
- pDocShell->PostDataChanged();
|
||||
if (pViewShell)
|
||||
pViewShell->CellContentChanged();
|
||||
|
||||
@@ -188,15 +196,6 @@ void ScUndoDeleteContents::Undo()
|
||||
DoChange( true );
|
||||
EndUndo();
|
||||
|
||||
- if (nFlags & IDF_CONTENTS)
|
||||
- {
|
||||
- // Broadcast only when the content changes. fdo#74687
|
||||
- if (mpDataSpans)
|
||||
- BroadcastChanges(*mpDataSpans);
|
||||
- else
|
||||
- BroadcastChanges(aRange);
|
||||
- }
|
||||
-
|
||||
HelperNotifyChanges::NotifyIfChangesListeners(*pDocShell, aRange);
|
||||
}
|
||||
|
||||
@@ -206,10 +205,6 @@ void ScUndoDeleteContents::Redo()
|
||||
DoChange( false );
|
||||
EndRedo();
|
||||
|
||||
- if (nFlags & IDF_CONTENTS)
|
||||
- // Broadcast only when the content changes. fdo#74687
|
||||
- BroadcastChanges(aRange);
|
||||
-
|
||||
HelperNotifyChanges::NotifyIfChangesListeners(*pDocShell, aRange);
|
||||
}
|
||||
|
||||
--
|
||||
1.9.3
|
||||
|
@ -0,0 +1,76 @@
|
||||
From ab5ff775b5b197a11a76a5e91859c31421ff559f Mon Sep 17 00:00:00 2001
|
||||
From: Kohei Yoshida <kohei.yoshida@collabora.com>
|
||||
Date: Sat, 18 Oct 2014 20:22:53 -0400
|
||||
Subject: [PATCH] fdo#82047: Correctly adjust references in range names on row
|
||||
deletion.
|
||||
|
||||
Change-Id: Iac924b0b6932863f7f9cc088f996e0b07c340d2c
|
||||
(cherry picked from commit 281847613bd3ae472523822f4be9c21cc353867e)
|
||||
Reviewed-on: https://gerrit.libreoffice.org/12025
|
||||
Reviewed-by: Eike Rathke <erack@redhat.com>
|
||||
Tested-by: Eike Rathke <erack@redhat.com>
|
||||
---
|
||||
sc/source/core/tool/token.cxx | 47 +++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 47 insertions(+)
|
||||
|
||||
diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx
|
||||
index 916a88e..84c8ccc 100644
|
||||
--- a/sc/source/core/tool/token.cxx
|
||||
+++ b/sc/source/core/tool/token.cxx
|
||||
@@ -3170,6 +3170,53 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceInName(
|
||||
if (adjustDoubleRefInName(rRef, rCxt, rPos))
|
||||
aRes.mbReferenceModified = true;
|
||||
}
|
||||
+ else if (rCxt.mnRowDelta < 0)
|
||||
+ {
|
||||
+ // row(s) deleted.
|
||||
+ if (rRef.Ref1.IsRowRel() || rRef.Ref2.IsRowRel())
|
||||
+ // Don't modify relative references in names.
|
||||
+ break;
|
||||
+
|
||||
+ if (aAbs.aStart.Col() < rCxt.maRange.aStart.Col() || rCxt.maRange.aEnd.Col() < aAbs.aEnd.Col())
|
||||
+ // column range of the reference is not entirely in the deleted column range.
|
||||
+ break;
|
||||
+
|
||||
+ ScRange aDeleted = rCxt.maRange;
|
||||
+ aDeleted.aStart.IncRow(rCxt.mnRowDelta);
|
||||
+ aDeleted.aEnd.SetRow(aDeleted.aStart.Row()-rCxt.mnRowDelta-1);
|
||||
+
|
||||
+ if (aAbs.aEnd.Row() < aDeleted.aStart.Row() || aDeleted.aEnd.Row() < aAbs.aStart.Row())
|
||||
+ // reference range doesn't intersect with the deleted range.
|
||||
+ break;
|
||||
+
|
||||
+ if (aDeleted.aStart.Row() <= aAbs.aStart.Row() && aAbs.aEnd.Row() <= aDeleted.aEnd.Row())
|
||||
+ {
|
||||
+ // This reference is entirely deleted.
|
||||
+ rRef.Ref1.SetRowDeleted(true);
|
||||
+ rRef.Ref2.SetRowDeleted(true);
|
||||
+ aRes.mbReferenceModified = true;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (aAbs.aStart.Row() < aDeleted.aStart.Row())
|
||||
+ {
|
||||
+ if (aDeleted.aEnd.Row() < aAbs.aEnd.Row())
|
||||
+ // Deleted in the middle. Make the reference shorter.
|
||||
+ rRef.Ref2.IncRow(rCxt.mnRowDelta);
|
||||
+ else
|
||||
+ // Deleted at tail end. Cut off the lower part.
|
||||
+ rRef.Ref2.SetAbsRow(aDeleted.aStart.Row()-1);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ // Deleted at the top. Cut the top off and shift up.
|
||||
+ rRef.Ref1.SetAbsRow(aDeleted.aEnd.Row()+1);
|
||||
+ rRef.Ref1.IncRow(rCxt.mnRowDelta);
|
||||
+ rRef.Ref2.IncRow(rCxt.mnRowDelta);
|
||||
+ }
|
||||
+
|
||||
+ aRes.mbReferenceModified = true;
|
||||
+ }
|
||||
else if (rCxt.maRange.Intersects(aAbs))
|
||||
{
|
||||
if (rCxt.mnColDelta && rCxt.maRange.aStart.Row() <= aAbs.aStart.Row() && aAbs.aEnd.Row() <= rCxt.maRange.aEnd.Row())
|
||||
--
|
||||
1.9.3
|
||||
|
@ -0,0 +1,54 @@
|
||||
From 4b2f0915f9f3bff7d2476ec41a272e5263fbb312 Mon Sep 17 00:00:00 2001
|
||||
From: Kohei Yoshida <kohei.yoshida@collabora.com>
|
||||
Date: Sun, 12 Oct 2014 10:18:09 -0400
|
||||
Subject: [PATCH] fdo#83901: ROW() and COLUMN() to be properly recalculated on
|
||||
cell move.
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
For cases where ROW or COLUMN references another cell that has shifted.
|
||||
|
||||
Change-Id: Ic4bef8672dab811ceff6886d9af0388306a66485
|
||||
(cherry picked from commit 0b29a16d1dcffd75e49bd7ad3da867b0d0ebfa38)
|
||||
Reviewed-on: https://gerrit.libreoffice.org/11934
|
||||
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
|
||||
Tested-by: Caolán McNamara <caolanm@redhat.com>
|
||||
---
|
||||
sc/source/core/data/column.cxx | 6 ++++++
|
||||
sc/source/core/data/formulacell.cxx | 2 +-
|
||||
2 files changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx
|
||||
index 1676e1b..42da658 100644
|
||||
--- a/sc/source/core/data/column.cxx
|
||||
+++ b/sc/source/core/data/column.cxx
|
||||
@@ -2096,6 +2096,12 @@ class UpdateRefOnNonCopy : std::unary_function<sc::FormulaGroupEntry, void>
|
||||
if (pCode->IsRecalcModeOnRefMove())
|
||||
aRes.mbValueChanged = true;
|
||||
}
|
||||
+ else if (aRes.mbReferenceModified && pCode->IsRecalcModeOnRefMove())
|
||||
+ {
|
||||
+ // The cell itself hasn't shifted. But it may have ROW or COLUMN
|
||||
+ // referencing another cell that has.
|
||||
+ aRes.mbValueChanged = true;
|
||||
+ }
|
||||
|
||||
if (aRes.mbNameModified)
|
||||
recompileTokenArray(*pTop);
|
||||
diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx
|
||||
index 2059aee..96eb323 100644
|
||||
--- a/sc/source/core/data/formulacell.cxx
|
||||
+++ b/sc/source/core/data/formulacell.cxx
|
||||
@@ -2758,7 +2758,7 @@ bool ScFormulaCell::UpdateReferenceOnShift(
|
||||
|
||||
if (bOnRefMove)
|
||||
// Cell may reference itself, e.g. ocColumn, ocRow without parameter
|
||||
- bOnRefMove = (bValChanged || (aPos != aOldPos));
|
||||
+ bOnRefMove = (bValChanged || (aPos != aOldPos) || bRefModified);
|
||||
|
||||
bool bNewListening = false;
|
||||
bool bInDeleteUndo = false;
|
||||
--
|
||||
1.9.3
|
||||
|
@ -0,0 +1,51 @@
|
||||
From 81e4dbe1adf196ee20f1a4bfbc50b54abfc79f4b Mon Sep 17 00:00:00 2001
|
||||
From: Kohei Yoshida <kohei.yoshida@collabora.com>
|
||||
Date: Sun, 26 Oct 2014 14:43:14 -0700
|
||||
Subject: [PATCH] fdo#85215: Don't adjust references wrt cell position when
|
||||
disabled.
|
||||
|
||||
Change-Id: Ie1a12cc189bcb66fad59ea9901ac0dc95bb68788
|
||||
(cherry picked from commit 10fc138307afb4b39baddb0d56eb8e986e5d29ea)
|
||||
Reviewed-on: https://gerrit.libreoffice.org/12106
|
||||
Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com>
|
||||
Tested-by: Markus Mohrhard <markus.mohrhard@googlemail.com>
|
||||
---
|
||||
sc/source/core/data/table3.cxx | 7 +++++--
|
||||
sc/source/ui/undo/undosort.cxx | 3 +--
|
||||
2 files changed, 6 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/sc/source/core/data/table3.cxx b/sc/source/core/data/table3.cxx
|
||||
index ce17bb9..05285d8 100644
|
||||
--- a/sc/source/core/data/table3.cxx
|
||||
+++ b/sc/source/core/data/table3.cxx
|
||||
@@ -856,8 +856,11 @@ void ScTable::SortReorderByRow(
|
||||
ScAddress aOldPos = rCell.maCell.mpFormula->aPos;
|
||||
|
||||
ScFormulaCell* pNew = rCell.maCell.mpFormula->Clone( aCellPos, SC_CLONECELL_DEFAULT);
|
||||
- pNew->CopyAllBroadcasters(*rCell.maCell.mpFormula);
|
||||
- pNew->GetCode()->AdjustReferenceOnMovedOrigin(aOldPos, aCellPos);
|
||||
+ if (pArray->IsUpdateRefs())
|
||||
+ {
|
||||
+ pNew->CopyAllBroadcasters(*rCell.maCell.mpFormula);
|
||||
+ pNew->GetCode()->AdjustReferenceOnMovedOrigin(aOldPos, aCellPos);
|
||||
+ }
|
||||
|
||||
sc::CellStoreType::iterator itBlk = rCellStore.push_back(pNew);
|
||||
}
|
||||
diff --git a/sc/source/ui/undo/undosort.cxx b/sc/source/ui/undo/undosort.cxx
|
||||
index 36156fe..4a00707 100644
|
||||
--- a/sc/source/ui/undo/undosort.cxx
|
||||
+++ b/sc/source/ui/undo/undosort.cxx
|
||||
@@ -46,8 +46,7 @@ void UndoSort::Execute( bool bUndo )
|
||||
|
||||
ScUndoUtil::MarkSimpleBlock(pDocShell, maParam.maSortRange);
|
||||
|
||||
- pDocShell->PostPaint(maParam.maSortRange, PAINT_GRID);
|
||||
- pDocShell->PostDataChanged();
|
||||
+ rDoc.SetDirty(maParam.maSortRange);
|
||||
if (!aParam.mbUpdateRefs)
|
||||
rDoc.BroadcastCells(aParam.maSortRange, SC_HINT_DATACHANGED);
|
||||
}
|
||||
--
|
||||
1.9.3
|
||||
|
@ -0,0 +1,35 @@
|
||||
From e963f4ee14fdda118a54745dcfca46e6244f0999 Mon Sep 17 00:00:00 2001
|
||||
From: Eike Rathke <erack@redhat.com>
|
||||
Date: Mon, 3 Nov 2014 14:52:27 +0100
|
||||
Subject: [PATCH] fdo#85403 broadcast changes after TextToColumn
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Regression introduced with 3d869cda8db03820dea8c4ba463eb155d05e933b for
|
||||
fdo#74014
|
||||
|
||||
Change-Id: Ie8ca1e7c15609aaf80b4ecbb6ccffc30a3f79f0a
|
||||
(cherry picked from commit 99cfc0f8a321c3fd3ef1a49d669ebc5744dbf606)
|
||||
Reviewed-on: https://gerrit.libreoffice.org/12216
|
||||
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
|
||||
Tested-by: Caolán McNamara <caolanm@redhat.com>
|
||||
---
|
||||
sc/source/ui/view/cellsh2.cxx | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/sc/source/ui/view/cellsh2.cxx b/sc/source/ui/view/cellsh2.cxx
|
||||
index 9a0fc853..7b7189c 100644
|
||||
--- a/sc/source/ui/view/cellsh2.cxx
|
||||
+++ b/sc/source/ui/view/cellsh2.cxx
|
||||
@@ -976,6 +976,7 @@ void ScCellShell::ExecuteDB( SfxRequest& rReq )
|
||||
pDlg->SaveParameters();
|
||||
aImport.SetExtOptions( aOptions );
|
||||
aImport.SetApi( false );
|
||||
+ aImport.SetImportBroadcast( true );
|
||||
aStream.Seek( 0 );
|
||||
aImport.ImportStream( aStream, OUString(), FORMAT_STRING );
|
||||
|
||||
--
|
||||
1.9.3
|
||||
|
Loading…
Reference in new issue