[Libreoffice-commits] core.git: sc/qa sc/source
László Németh (via logerrit)
logerrit at kemper.freedesktop.org
Tue Dec 1 09:13:18 UTC 2020
sc/qa/unit/data/ods/updateCircleInMergedCell.ods |binary
sc/qa/unit/subsequent_filters-test.cxx | 35 +++++++++++++++++++++++
sc/source/core/tool/detfunc.cxx | 9 +++--
sc/source/ui/docshell/docfunc.cxx | 8 +++++
sc/source/ui/inc/docfunc.hxx | 3 +
5 files changed, 51 insertions(+), 4 deletions(-)
New commits:
commit b18c7096af799e49bc27771cd1500c4eff6bb780
Author: László Németh <nemeth at numbertext.org>
AuthorDate: Mon Nov 30 18:26:43 2020 +0100
Commit: László Németh <nemeth at numbertext.org>
CommitDate: Tue Dec 1 10:12:34 2020 +0100
Revert "Revert "tdf#138483 sc: update red circles after merging cells""
This reverts commit 210ec3ef966b2f9206e9e52781f4cb9d2ed46300.
Reason for revert:
Build error has been solved in
commit b208621f4ac5dc1ae40cb853f8662e8b10434cdc
(Missing include (for ScMergeFlagAttr))
Change-Id: Ifc82872dd6e71c106d7ded69ca17d2ae2ba251db
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/106829
Tested-by: Jenkins
Reviewed-by: László Németh <nemeth at numbertext.org>
diff --git a/sc/qa/unit/data/ods/updateCircleInMergedCell.ods b/sc/qa/unit/data/ods/updateCircleInMergedCell.ods
new file mode 100644
index 000000000000..93be82487e22
Binary files /dev/null and b/sc/qa/unit/data/ods/updateCircleInMergedCell.ods differ
diff --git a/sc/qa/unit/subsequent_filters-test.cxx b/sc/qa/unit/subsequent_filters-test.cxx
index 9c087549ec3e..2ef3cf4fb326 100644
--- a/sc/qa/unit/subsequent_filters-test.cxx
+++ b/sc/qa/unit/subsequent_filters-test.cxx
@@ -65,6 +65,8 @@
#include <stlpool.hxx>
#include <hints.hxx>
#include <detfunc.hxx>
+#include <cellmergeoption.hxx>
+#include <undoblk.hxx>
#include <orcusfilters.hxx>
#include <filter.hxx>
@@ -102,6 +104,7 @@ public:
virtual void tearDown() override;
//ods, xls, xlsx filter tests
+ void testUpdateCircleInMergedCellODS();
void testDeleteCircleInMergedCellODS();
void testBooleanFormatXLSX();
void testBasicCellContentODS();
@@ -292,6 +295,7 @@ public:
void testDeleteCirclesInRowAndCol();
CPPUNIT_TEST_SUITE(ScFiltersTest);
+ CPPUNIT_TEST(testUpdateCircleInMergedCellODS);
CPPUNIT_TEST(testDeleteCircleInMergedCellODS);
CPPUNIT_TEST(testBooleanFormatXLSX);
CPPUNIT_TEST(testBasicCellContentODS);
@@ -526,6 +530,37 @@ void testRangeNameImpl(const ScDocument& rDoc)
}
+void ScFiltersTest::testUpdateCircleInMergedCellODS()
+{
+ ScDocShellRef xDocSh = loadDoc("updateCircleInMergedCell.", FORMAT_ODS);
+ CPPUNIT_ASSERT_MESSAGE("Failed to load updateCircleInMergedCell.ods", xDocSh.is());
+
+ ScDocument& rDoc = xDocSh->GetDocument();
+ rDoc.EnableChangeReadOnly(true);
+
+ ScDrawLayer* pDrawLayer = rDoc.GetDrawLayer();
+ SdrPage* pPage = pDrawLayer->GetPage(0);
+ CPPUNIT_ASSERT_MESSAGE("draw page for sheet 1 should exist.", pPage);
+
+ // There should be four circle objects!
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(4), pPage->GetObjCount());
+
+ ScCellMergeOption aCellMergeOption(0,0,1,1); // A1:B2
+ aCellMergeOption.maTabs.insert(0);
+ xDocSh->GetDocFunc().MergeCells(aCellMergeOption, false, true, true, false);
+
+ // There should be a circle object!
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), pPage->GetObjCount());
+
+ std::unique_ptr<ScUndoRemoveMerge> pUndoRemoveMerge;
+ xDocSh->GetDocFunc().UnmergeCells(aCellMergeOption, true, pUndoRemoveMerge.get());
+
+ // There should be four circle objects!
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(4), pPage->GetObjCount());
+
+ xDocSh->DoClose();
+}
+
void ScFiltersTest::testDeleteCircleInMergedCellODS()
{
ScDocShellRef xDocSh = loadDoc("deleteCircleInMergedCell.", FORMAT_ODS);
diff --git a/sc/source/core/tool/detfunc.cxx b/sc/source/core/tool/detfunc.cxx
index be4d3e01e02c..f2d8f8254d20 100644
--- a/sc/source/core/tool/detfunc.cxx
+++ b/sc/source/core/tool/detfunc.cxx
@@ -1382,13 +1382,15 @@ bool ScDetectiveFunc::MarkInvalid(bool& rOverflow)
if ( bMarkEmpty )
for ( nRow = nNextRow; nRow < nCellRow && nInsCount < SC_DET_MAXCIRCLE; nRow++ )
{
- DrawCircle( nCol, nRow, aData );
+ if(!pPattern->GetItem(ATTR_MERGE_FLAG).IsOverlapped())
+ DrawCircle( nCol, nRow, aData );
++nInsCount;
}
ScRefCellValue aCell = aCellIter.getRefCellValue();
if (!pData->IsDataValid(aCell, aCellIter.GetPos()))
{
- DrawCircle( nCol, nCellRow, aData );
+ if(!pPattern->GetItem(ATTR_MERGE_FLAG).IsOverlapped())
+ DrawCircle( nCol, nCellRow, aData );
++nInsCount;
}
nNextRow = nCellRow + 1;
@@ -1396,7 +1398,8 @@ bool ScDetectiveFunc::MarkInvalid(bool& rOverflow)
if ( bMarkEmpty )
for ( nRow = nNextRow; nRow <= nRow2 && nInsCount < SC_DET_MAXCIRCLE; nRow++ )
{
- DrawCircle( nCol, nRow, aData );
+ if(!pPattern->GetItem(ATTR_MERGE_FLAG).IsOverlapped())
+ DrawCircle(nCol, nRow, aData);
++nInsCount;
}
}
diff --git a/sc/source/ui/docshell/docfunc.cxx b/sc/source/ui/docshell/docfunc.cxx
index 755a563cc43a..e05513039d9e 100644
--- a/sc/source/ui/docshell/docfunc.cxx
+++ b/sc/source/ui/docshell/docfunc.cxx
@@ -5027,6 +5027,10 @@ bool ScDocFunc::MergeCells( const ScCellMergeOption& rOption, bool bContents, bo
rDoc.SetDirty(aRange, true);
}
+ bool bDone = ScDetectiveFunc(rDoc, nTab).DeleteAll( ScDetectiveDelete::Circles );
+ if(bDone)
+ DetectiveMarkInvalid(nTab);
+
bNeedContentsUndo |= bNeedContents;
}
@@ -5112,6 +5116,10 @@ bool ScDocFunc::UnmergeCells( const ScCellMergeOption& rOption, bool bRecord, Sc
if ( !AdjustRowHeight( aExtended ) )
rDocShell.PostPaint( aExtended, PaintPartFlags::Grid );
+
+ bool bDone = ScDetectiveFunc(rDoc, nTab).DeleteAll( ScDetectiveDelete::Circles );
+ if(bDone)
+ DetectiveMarkInvalid(nTab);
}
if (bRecord)
diff --git a/sc/source/ui/inc/docfunc.hxx b/sc/source/ui/inc/docfunc.hxx
index 1984c0da440a..f7b518ef7f35 100644
--- a/sc/source/ui/inc/docfunc.hxx
+++ b/sc/source/ui/inc/docfunc.hxx
@@ -195,7 +195,8 @@ public:
MergeCells( const ScCellMergeOption& rOption, bool bContents,
bool bRecord, bool bApi, bool bEmptyMergedCells = false );
bool UnmergeCells( const ScRange& rRange, bool bRecord, ScUndoRemoveMerge* pUndoRemoveMerge );
- bool UnmergeCells( const ScCellMergeOption& rOption, bool bRecord, ScUndoRemoveMerge* pUndoRemoveMerge );
+ SC_DLLPUBLIC bool
+ UnmergeCells( const ScCellMergeOption& rOption, bool bRecord, ScUndoRemoveMerge* pUndoRemoveMerge );
// takes ownership of pNewRanges, nTab = -1 for local range names
void SetNewRangeNames( std::unique_ptr<ScRangeName> pNewRanges, bool bModifyDoc, SCTAB nTab );
More information about the Libreoffice-commits
mailing list