diff options
author | Luboš Luňák <l.lunak@collabora.com> | 2022-03-03 12:21:27 +0100 |
---|---|---|
committer | Luboš Luňák <l.lunak@collabora.com> | 2022-03-23 09:09:06 +0100 |
commit | 569a0d55d15cc21bcdadb34697efa7e00216d159 (patch) | |
tree | d69f3732706d5dd75b7898dd05f084fdaad2cec8 /sc | |
parent | 0d4ffe2269f0ec541898a3a9d3e4a8d0018fa101 (diff) |
make ScMarkData::IsAllMarked() work also for simple marks
Change-Id: I41009c83827619605b4cfc4909f1d9922cde68a9
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130923
Tested-by: Jenkins
Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
Diffstat (limited to 'sc')
-rw-r--r-- | sc/qa/unit/mark_test.cxx | 32 | ||||
-rw-r--r-- | sc/source/core/data/markdata.cxx | 13 | ||||
-rw-r--r-- | sc/source/ui/Accessibility/AccessibleDocument.cxx | 1 | ||||
-rw-r--r-- | sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx | 1 | ||||
-rw-r--r-- | sc/source/ui/unoobj/cellsuno.cxx | 4 |
5 files changed, 42 insertions, 9 deletions
diff --git a/sc/qa/unit/mark_test.cxx b/sc/qa/unit/mark_test.cxx index 309a62143aff..55a13cb0da57 100644 --- a/sc/qa/unit/mark_test.cxx +++ b/sc/qa/unit/mark_test.cxx @@ -112,6 +112,8 @@ public: void testScMarkArraySearch(); + void testIsAllMarked(); + CPPUNIT_TEST_SUITE(Test); CPPUNIT_TEST(testSimpleMark_Simple); CPPUNIT_TEST(testSimpleMark_Column); @@ -123,6 +125,7 @@ public: CPPUNIT_TEST(testDeleteTabBeforeSelected); CPPUNIT_TEST(testDeleteTabAfterSelected); CPPUNIT_TEST(testScMarkArraySearch); + CPPUNIT_TEST(testIsAllMarked); CPPUNIT_TEST_SUITE_END(); private: @@ -970,6 +973,35 @@ void Test::testScMarkArraySearch() } } +void Test::testIsAllMarked() +{ + ScSheetLimits aSheetLimits(MAXCOL, MAXROW); + ScMarkData mark(aSheetLimits); + ScRange range1( ScAddress( 5, 10, 0 ), ScAddress( 15, 20, 0 )); + ScRange range2( ScAddress( 2, 2, 0 ), ScAddress( 25, 30, 0 )); + CPPUNIT_ASSERT( !mark.IsAllMarked( range1 )); + CPPUNIT_ASSERT( !mark.IsAllMarked( range2 )); + mark.MarkToMulti(); + CPPUNIT_ASSERT( !mark.IsAllMarked( range1 )); + CPPUNIT_ASSERT( !mark.IsAllMarked( range2 )); + + mark.ResetMark(); + mark.SetMarkArea( range1 ); + CPPUNIT_ASSERT( mark.IsAllMarked( range1 )); + CPPUNIT_ASSERT( !mark.IsAllMarked( range2 )); + mark.MarkToMulti(); + CPPUNIT_ASSERT( mark.IsAllMarked( range1 )); + CPPUNIT_ASSERT( !mark.IsAllMarked( range2 )); + + mark.ResetMark(); + mark.SetMarkArea( range2 ); + CPPUNIT_ASSERT( mark.IsAllMarked( range1 )); + CPPUNIT_ASSERT( mark.IsAllMarked( range2 )); + mark.MarkToMulti(); + CPPUNIT_ASSERT( mark.IsAllMarked( range1 )); + CPPUNIT_ASSERT( mark.IsAllMarked( range2 )); +} + CPPUNIT_TEST_SUITE_REGISTRATION(Test); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sc/source/core/data/markdata.cxx b/sc/source/core/data/markdata.cxx index 2b3f948d8803..596937e24346 100644 --- a/sc/source/core/data/markdata.cxx +++ b/sc/source/core/data/markdata.cxx @@ -564,13 +564,20 @@ std::vector<sc::ColRowSpan> ScMarkData::GetMarkedColSpans() const bool ScMarkData::IsAllMarked( const ScRange& rRange ) const { - if ( !bMultiMarked ) - return false; - SCCOL nStartCol = rRange.aStart.Col(); SCROW nStartRow = rRange.aStart.Row(); SCCOL nEndCol = rRange.aEnd.Col(); SCROW nEndRow = rRange.aEnd.Row(); + + if ( !bMultiMarked ) + { + if ( bMarked && !bMarkIsNeg && + aMarkRange.aStart.Col() <= nStartCol && aMarkRange.aEnd.Col() >= nEndCol && + aMarkRange.aStart.Row() <= nStartRow && aMarkRange.aEnd.Row() >= nEndRow ) + return true; + return false; + } + bool bOk = true; if ( nStartCol == 0 && nEndCol == mrSheetLimits.mnMaxCol ) diff --git a/sc/source/ui/Accessibility/AccessibleDocument.cxx b/sc/source/ui/Accessibility/AccessibleDocument.cxx index 913a2984421f..2999c7928e8d 100644 --- a/sc/source/ui/Accessibility/AccessibleDocument.cxx +++ b/sc/source/ui/Accessibility/AccessibleDocument.cxx @@ -2117,7 +2117,6 @@ bool ScAccessibleDocument::IsTableSelected() const SCTAB nTab(getVisibleTable()); //#103800#; use a copy of MarkData ScMarkData aMarkData(mpViewShell->GetViewData().GetMarkData()); - aMarkData.MarkToMulti(); ScDocument* pDoc = GetDocument(); if (aMarkData.IsAllMarked( ScRange( 0, 0, nTab, pDoc->MaxCol(), pDoc->MaxRow(), nTab))) bResult = true; diff --git a/sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx b/sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx index 03a2700d0ec5..66f7056cbee3 100644 --- a/sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx +++ b/sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx @@ -1357,7 +1357,6 @@ bool ScAccessibleSpreadsheet::IsCompleteSheetSelected() { //#103800#; use a copy of MarkData ScMarkData aMarkData(mpViewShell->GetViewData().GetMarkData()); - aMarkData.MarkToMulti(); if (aMarkData.IsAllMarked(maRange)) bResult = true; } diff --git a/sc/source/ui/unoobj/cellsuno.cxx b/sc/source/ui/unoobj/cellsuno.cxx index 542bfd6c5954..532e675ad08b 100644 --- a/sc/source/ui/unoobj/cellsuno.cxx +++ b/sc/source/ui/unoobj/cellsuno.cxx @@ -3657,7 +3657,6 @@ uno::Reference<sheet::XSheetCellRanges> SAL_CALL ScCellRangesBase::queryPreceden // aMarkData uses aNewRanges, not aRanges, so GetMarkData can't be used ScMarkData aMarkData(rDoc.GetSheetLimits()); aMarkData.MarkFromRangeList( aNewRanges, false ); - aMarkData.MarkToMulti(); // needed for IsAllMarked for (size_t nR = 0, nCount = aNewRanges.size(); nR<nCount; ++nR) { @@ -3706,7 +3705,6 @@ uno::Reference<sheet::XSheetCellRanges> SAL_CALL ScCellRangesBase::queryDependen // aMarkData uses aNewRanges, not aRanges, so GetMarkData can't be used ScMarkData aMarkData(rDoc.GetSheetLimits()); aMarkData.MarkFromRangeList( aNewRanges, false ); - aMarkData.MarkToMulti(); // needed for IsAllMarked SCTAB nTab = lcl_FirstTab(aNewRanges); //! all tables @@ -4285,7 +4283,6 @@ static bool lcl_FindRangeOrEntry( const std::vector<ScCellRangesObj::ScNamedEntr { ScMarkData aMarkData(pDocSh->GetDocument().GetSheetLimits()); aMarkData.MarkFromRangeList( rRanges, false ); - aMarkData.MarkToMulti(); // needed for IsAllMarked if ( aMarkData.IsAllMarked( aCellRange ) ) { rFound = aCellRange; @@ -4303,7 +4300,6 @@ static bool lcl_FindRangeOrEntry( const std::vector<ScCellRangesObj::ScNamedEntr const ScRange& rComp = rNamedEntry.GetRange(); ScMarkData aMarkData(pDocSh->GetDocument().GetSheetLimits()); aMarkData.MarkFromRangeList( rRanges, false ); - aMarkData.MarkToMulti(); // needed for IsAllMarked if ( aMarkData.IsAllMarked( rComp ) ) { rFound = rComp; |