diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2022-04-09 14:30:22 +0900 |
---|---|---|
committer | Tomaž Vajngerl <quikee@gmail.com> | 2022-04-10 15:27:36 +0200 |
commit | a08f9ed2341bc60faae6b86538661fea40417ace (patch) | |
tree | d0e2ed53550d01b4e418eec55276ad358b4b54c7 /sc/qa | |
parent | 655b6c2f46a73d9893ba8e6b572731a5890a4f72 (diff) |
sc: add UI, undo/redo and test to change sparkline data range
This adds a "edit sparkline" action to the context menu and a
dialog to change the data range of a sparkline. To change a
sparkline using undo/redo, a new class UndoEditSparkline was
added, which allows to change the attributes of a sparkline and
revert back the old attributes when undoing. This is then used in
the Dialog when setting the changed data range of a sparkline.
To make sure that undo/redo works correctly, a simple unit tests
was added.
Change-Id: I08af1813fa288278bc0d33b0540660b325b17235
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132748
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'sc/qa')
-rw-r--r-- | sc/qa/unit/SparklineTest.cxx | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/sc/qa/unit/SparklineTest.cxx b/sc/qa/unit/SparklineTest.cxx index f8d07edc53e6..9c52ab1d1c65 100644 --- a/sc/qa/unit/SparklineTest.cxx +++ b/sc/qa/unit/SparklineTest.cxx @@ -58,6 +58,7 @@ public: void testUndoRedoEditSparklineGroup(); void testUndoRedoUngroupSparklines(); void testUndoRedoGroupSparklines(); + void testUndoRedoEditSparkline(); void testSparklineList(); CPPUNIT_TEST_SUITE(SparklineTest); @@ -72,6 +73,7 @@ public: CPPUNIT_TEST(testUndoRedoEditSparklineGroup); CPPUNIT_TEST(testUndoRedoUngroupSparklines); CPPUNIT_TEST(testUndoRedoGroupSparklines); + CPPUNIT_TEST(testUndoRedoEditSparkline); CPPUNIT_TEST(testSparklineList); CPPUNIT_TEST_SUITE_END(); }; @@ -867,6 +869,68 @@ void SparklineTest::testUndoRedoGroupSparklines() xDocSh->DoClose(); } +void SparklineTest::testUndoRedoEditSparkline() +{ + ScDocShellRef xDocSh = loadEmptyDocument(); + CPPUNIT_ASSERT(xDocSh); + + ScDocument& rDocument = xDocSh->GetDocument(); + ScTabViewShell* pViewShell = xDocSh->GetBestViewShell(false); + CPPUNIT_ASSERT(pViewShell); + + auto& rDocFunc = xDocSh->GetDocFunc(); + + // Try to delete sparkline that doesn't exist - returns false + CPPUNIT_ASSERT(!rDocFunc.DeleteSparkline(ScAddress(0, 6, 0))); + + // insert test data - A1:A6 + insertTestData(rDocument); + + // Sparkline range + ScAddress aAddress(0, 6, 0); + ScRange aRange(aAddress); + + // Check Sparkline at cell A7 doesn't exists + auto pSparkline = rDocument.GetSparkline(aAddress); + CPPUNIT_ASSERT(!pSparkline); + + auto pSparklineGroup = std::make_shared<sc::SparklineGroup>(); + CPPUNIT_ASSERT(rDocFunc.InsertSparklines(ScRange(0, 0, 0, 0, 5, 0), aRange, pSparklineGroup)); + + // Check Sparkline at cell A7 + pSparkline = rDocument.GetSparkline(aAddress); + CPPUNIT_ASSERT(pSparkline); + CPPUNIT_ASSERT_EQUAL(size_t(1), pSparkline->getInputRange().size()); + CPPUNIT_ASSERT_EQUAL(ScRange(0, 0, 0, 0, 5, 0), pSparkline->getInputRange()[0]); + + // Change Sparkline + CPPUNIT_ASSERT( + rDocFunc.ChangeSparkline(pSparkline, SCTAB(0), ScRangeList(ScRange(0, 1, 0, 0, 4, 0)))); + + pSparkline = rDocument.GetSparkline(aAddress); + CPPUNIT_ASSERT(pSparkline); + CPPUNIT_ASSERT_EQUAL(size_t(1), pSparkline->getInputRange().size()); + CPPUNIT_ASSERT_EQUAL(ScRange(0, 1, 0, 0, 4, 0), pSparkline->getInputRange()[0]); + + // Undo + rDocument.GetUndoManager()->Undo(); + + pSparkline = rDocument.GetSparkline(aAddress); + CPPUNIT_ASSERT(pSparkline); + CPPUNIT_ASSERT_EQUAL(size_t(1), pSparkline->getInputRange().size()); + CPPUNIT_ASSERT_EQUAL(ScRange(0, 0, 0, 0, 5, 0), pSparkline->getInputRange()[0]); + + // Redo + rDocument.GetUndoManager()->Redo(); + + pSparkline = rDocument.GetSparkline(aAddress); + CPPUNIT_ASSERT(pSparkline); + CPPUNIT_ASSERT_EQUAL(size_t(1), pSparkline->getInputRange().size()); + CPPUNIT_ASSERT_EQUAL(ScRange(0, 1, 0, 0, 4, 0), pSparkline->getInputRange()[0]); + + xDocSh->DoClose(); +} + void SparklineTest::testSparklineList() { ScDocShellRef xDocSh = loadEmptyDocument(); |