sc/qa/unit/tiledrendering/tiledrendering.cxx | 52 +++++++++++++++++++++ sd/qa/unit/tiledrendering/tiledrendering.cxx | 54 ++++++++++++++++++++++ svx/source/table/tablecontroller.cxx | 30 +++++++++--- sw/qa/extras/tiledrendering/tiledrendering.cxx | 60 +++++++++++++++++++++++++ 4 files changed, 188 insertions(+), 8 deletions(-)
New commits: commit 0f94dd7975e19e40665a74fd8c847f1213825d79 Author: merttumer <[email protected]> AuthorDate: Mon May 17 05:52:01 2021 +0300 Commit: Mert Tumer <[email protected]> CommitDate: Mon May 31 05:53:45 2021 +0200 Implemented Delete key deletes the table when all the cells are selected Change-Id: I8a17c73781a3399b214d5655b83036652933a90a Signed-off-by: merttumer <[email protected]> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115689 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116309 diff --git a/svx/source/table/tablecontroller.cxx b/svx/source/table/tablecontroller.cxx index 4ad539380e63..9b1cfd516b3d 100644 --- a/svx/source/table/tablecontroller.cxx +++ b/svx/source/table/tablecontroller.cxx @@ -1424,30 +1424,44 @@ bool SvxTableController::DeleteMarked() SdrTableObj& rTableObj(*mxTableObj); SdrModel& rModel(rTableObj.getSdrModelFromSdrObject()); const bool bUndo(rModel.IsUndoEnabled()); + bool bDeleteTable = false; if (bUndo) rModel.BegUndo(SvxResId(STR_TABLE_DELETE_CELL_CONTENTS)); CellPos aStart, aEnd; getSelectedCells( aStart, aEnd ); - for( sal_Int32 nRow = aStart.mnRow; nRow <= aEnd.mnRow; nRow++ ) + const sal_Int32 nRemovedColumns = aEnd.mnCol - aStart.mnCol + 1; + const sal_Int32 nRemovedRows = aEnd.mnRow - aStart.mnRow + 1; + if( nRemovedColumns == mxTable->getColumnCount() && nRemovedRows == mxTable->getRowCount()) { - for( sal_Int32 nCol = aStart.mnCol; nCol <= aEnd.mnCol; nCol++ ) + bDeleteTable = true; + } + else + { + for( sal_Int32 nRow = aStart.mnRow; nRow <= aEnd.mnRow; nRow++ ) { - CellRef xCell( dynamic_cast< Cell* >( mxTable->getCellByPosition( nCol, nRow ).get() ) ); - if (xCell.is() && xCell->hasText()) + for( sal_Int32 nCol = aStart.mnCol; nCol <= aEnd.mnCol; nCol++ ) { - if (bUndo) - xCell->AddUndo(); - xCell->SetOutlinerParaObject(nullptr); + CellRef xCell( dynamic_cast< Cell* >( mxTable->getCellByPosition( nCol, nRow ).get() ) ); + if (xCell.is() && xCell->hasText()) + { + if (bUndo) + xCell->AddUndo(); + xCell->SetOutlinerParaObject(nullptr); + } } } } + if (bDeleteTable) + mrView.DeleteMarkedObj(); + if (bUndo) rModel.EndUndo(); - UpdateTableShape(); + if (!bDeleteTable) + UpdateTableShape(); return true; } commit e39f6b4d296ce9325ff3910c9cf25ca689c0eedb Author: merttumer <[email protected]> AuthorDate: Thu May 13 11:21:11 2021 +0300 Commit: Mert Tumer <[email protected]> CommitDate: Mon May 31 05:53:30 2021 +0200 Unit tests for .uno:MoveShapeHandle command Change-Id: Ia1049325bf26fbe6a3c8ac77c873d1af010d3581 Signed-off-by: merttumer <[email protected]> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115541 Tested-by: Jenkins CollaboraOffice <[email protected]> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116308 diff --git a/sc/qa/unit/tiledrendering/tiledrendering.cxx b/sc/qa/unit/tiledrendering/tiledrendering.cxx index 80e0f7b2e2f0..620e79541a28 100644 --- a/sc/qa/unit/tiledrendering/tiledrendering.cxx +++ b/sc/qa/unit/tiledrendering/tiledrendering.cxx @@ -120,6 +120,7 @@ public: void testSortAscendingDescending(); void testAutoInputStringBlock(); void testAutoInputExactMatch(); + void testMoveShapeHandle(); CPPUNIT_TEST_SUITE(ScTiledRenderingTest); @@ -171,6 +172,7 @@ public: CPPUNIT_TEST(testSortAscendingDescending); CPPUNIT_TEST(testAutoInputStringBlock); CPPUNIT_TEST(testAutoInputExactMatch); + CPPUNIT_TEST(testMoveShapeHandle); CPPUNIT_TEST_SUITE_END(); private: @@ -448,6 +450,7 @@ public: boost::property_tree::ptree m_aCommentCallbackResult; OString m_sInvalidateHeader; OString m_sInvalidateSheetGeometry; + OString m_ShapeSelection; ViewCallback(bool bDeleteListenerOnDestruct=true) : m_bOwnCursorInvalidated(false), @@ -510,6 +513,7 @@ public: case LOK_CALLBACK_GRAPHIC_SELECTION: { m_bGraphicSelection = true; + m_ShapeSelection = OString(pPayload); } break; case LOK_CALLBACK_GRAPHIC_VIEW_SELECTION: @@ -670,6 +674,54 @@ void ScTiledRenderingTest::testViewLock() CPPUNIT_ASSERT(!aView1.m_bViewLock); } +static void lcl_extractHandleParameters(const OString& selection, int& id, int& x, int& y) +{ + OString extraInfo = selection.copy(selection.indexOf("{")); + std::stringstream aStream(extraInfo.getStr()); + boost::property_tree::ptree aTree; + boost::property_tree::read_json(aStream, aTree); + boost::property_tree::ptree + handle0 = aTree + .get_child("handles") + .get_child("kinds") + .get_child("rectangle") + .get_child("1") + .begin()->second; + id = handle0.get_child("id").get_value<int>(); + x = handle0.get_child("point").get_child("x").get_value<int>(); + y = handle0.get_child("point").get_child("y").get_value<int>(); +} + +void ScTiledRenderingTest::testMoveShapeHandle() +{ + comphelper::LibreOfficeKit::setActive(); + ScModelObj* pModelObj = createDoc("shape.ods"); + ViewCallback aView1; + pModelObj->postMouseEvent(LOK_MOUSEEVENT_MOUSEBUTTONDOWN, /*x=*/ 1,/*y=*/ 1,/*count=*/ 1, /*buttons=*/ 1, /*modifier=*/0); + pModelObj->postMouseEvent(LOK_MOUSEEVENT_MOUSEBUTTONUP, /*x=*/ 1, /*y=*/ 1, /*count=*/ 1, /*buttons=*/ 1, /*modifier=*/0); + Scheduler::ProcessEventsToIdle(); + + CPPUNIT_ASSERT(!aView1.m_ShapeSelection.isEmpty()); + { + int id, x, y; + lcl_extractHandleParameters(aView1.m_ShapeSelection, id, x ,y); + int oldX = x; + int oldY = y; + uno::Sequence<beans::PropertyValue> aPropertyValues(comphelper::InitPropertySequence( + { + {"HandleNum", uno::makeAny(id)}, + {"NewPosX", uno::makeAny(x+1)}, + {"NewPosY", uno::makeAny(y+1)} + })); + comphelper::dispatchCommand(".uno:MoveShapeHandle", aPropertyValues); + Scheduler::ProcessEventsToIdle(); + CPPUNIT_ASSERT(!aView1.m_ShapeSelection.isEmpty()); + lcl_extractHandleParameters(aView1.m_ShapeSelection, id, x ,y); + CPPUNIT_ASSERT_EQUAL(x-1, oldX); + CPPUNIT_ASSERT_EQUAL(y-1, oldY); + } +} + void ScTiledRenderingTest::testColRowResize() { comphelper::LibreOfficeKit::setActive(); diff --git a/sd/qa/unit/tiledrendering/tiledrendering.cxx b/sd/qa/unit/tiledrendering/tiledrendering.cxx index d8d8ed089533..fe6ee4e628b7 100644 --- a/sd/qa/unit/tiledrendering/tiledrendering.cxx +++ b/sd/qa/unit/tiledrendering/tiledrendering.cxx @@ -131,6 +131,7 @@ public: void testInsertDeletePageInvalidation(); void testSpellOnlineRenderParameter(); void testSlideDuplicateUndo(); + void testMoveShapeHandle(); CPPUNIT_TEST_SUITE(SdTiledRenderingTest); CPPUNIT_TEST(testCreateDestroy); @@ -186,6 +187,7 @@ public: CPPUNIT_TEST(testInsertDeletePageInvalidation); CPPUNIT_TEST(testSpellOnlineRenderParameter); CPPUNIT_TEST(testSlideDuplicateUndo); + CPPUNIT_TEST(testMoveShapeHandle); CPPUNIT_TEST_SUITE_END(); @@ -866,6 +868,7 @@ public: std::map<int, bool> m_aViewCursorVisibilities; bool m_bViewSelectionSet; boost::property_tree::ptree m_aCommentCallbackResult; + OString m_ShapeSelection; ViewCallback() : m_bGraphicSelectionInvalidated(false), @@ -917,6 +920,7 @@ public: case LOK_CALLBACK_GRAPHIC_SELECTION: { m_bGraphicSelectionInvalidated = true; + m_ShapeSelection = OString(pPayload); } break; case LOK_CALLBACK_GRAPHIC_VIEW_SELECTION: @@ -2594,6 +2598,56 @@ void SdTiledRenderingTest::testSlideDuplicateUndo() CPPUNIT_ASSERT(!pView0->GetTextEditPageView()); } +static void lcl_extractHandleParameters(const OString& selection, int& id, int& x, int& y) +{ + OString extraInfo = selection.copy(selection.indexOf("{")); + std::stringstream aStream(extraInfo.getStr()); + boost::property_tree::ptree aTree; + boost::property_tree::read_json(aStream, aTree); + boost::property_tree::ptree + handle0 = aTree + .get_child("handles") + .get_child("kinds") + .get_child("rectangle") + .get_child("1") + .begin()->second; + id = handle0.get_child("id").get_value<int>(); + x = handle0.get_child("point").get_child("x").get_value<int>(); + y = handle0.get_child("point").get_child("y").get_value<int>(); +} + +void SdTiledRenderingTest::testMoveShapeHandle() +{ + SdXImpressDocument* pXImpressDocument = createDoc("shape.odp"); + ViewCallback aView1; + sd::ViewShell* pViewShell = pXImpressDocument->GetDocShell()->GetViewShell(); + SdPage* pPage = pViewShell->GetActualPage(); + SdrObject* pObject = pPage->GetObj(0); + SdrView* pView = pViewShell->GetView(); + pView->MarkObj(pObject, pView->GetSdrPageView()); + Scheduler::ProcessEventsToIdle(); + + CPPUNIT_ASSERT(!aView1.m_ShapeSelection.isEmpty()); + { + int id, x, y; + lcl_extractHandleParameters(aView1.m_ShapeSelection, id, x ,y); + int oldX = x; + int oldY = y; + uno::Sequence<beans::PropertyValue> aPropertyValues(comphelper::InitPropertySequence( + { + {"HandleNum", uno::makeAny(id)}, + {"NewPosX", uno::makeAny(x+1)}, + {"NewPosY", uno::makeAny(y+1)} + })); + comphelper::dispatchCommand(".uno:MoveShapeHandle", aPropertyValues); + Scheduler::ProcessEventsToIdle(); + CPPUNIT_ASSERT(!aView1.m_ShapeSelection.isEmpty()); + lcl_extractHandleParameters(aView1.m_ShapeSelection, id, x ,y); + CPPUNIT_ASSERT_EQUAL(x-1, oldX); + CPPUNIT_ASSERT_EQUAL(y-1, oldY); + } + +} CPPUNIT_TEST_SUITE_REGISTRATION(SdTiledRenderingTest); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sw/qa/extras/tiledrendering/tiledrendering.cxx b/sw/qa/extras/tiledrendering/tiledrendering.cxx index a0aea532d7c1..2add6e6237c6 100644 --- a/sw/qa/extras/tiledrendering/tiledrendering.cxx +++ b/sw/qa/extras/tiledrendering/tiledrendering.cxx @@ -155,6 +155,7 @@ public: void testBulletNoNumInvalidation(); void testBulletMultiDeleteInvalidation(); void testCondCollCopy(); + void testMoveShapeHandle(); CPPUNIT_TEST_SUITE(SwTiledRenderingTest); CPPUNIT_TEST(testRegisterCallback); @@ -233,6 +234,7 @@ public: CPPUNIT_TEST(testBulletNoNumInvalidation); CPPUNIT_TEST(testBulletMultiDeleteInvalidation); CPPUNIT_TEST(testCondCollCopy); + CPPUNIT_TEST(testMoveShapeHandle); CPPUNIT_TEST_SUITE_END(); private: @@ -257,6 +259,7 @@ private: OString m_sHyperlinkText; OString m_sHyperlinkLink; OString m_aFormFieldButton; + OString m_ShapeSelection; }; SwTiledRenderingTest::SwTiledRenderingTest() @@ -416,7 +419,13 @@ void SwTiledRenderingTest::callbackImpl(int nType, const char* pPayload) m_aFormFieldButton = OString(pPayload); } break; + case LOK_CALLBACK_GRAPHIC_SELECTION: + { + m_ShapeSelection = OString(pPayload); + } + break; } + } void SwTiledRenderingTest::testRegisterCallback() @@ -2822,6 +2831,57 @@ void SwTiledRenderingTest::testDropDownFormFieldButtonNoSelection() } } +static void lcl_extractHandleParameters(const OString& selection, int& id, int& x, int& y) +{ + OString extraInfo = selection.copy(selection.indexOf("{")); + std::stringstream aStream(extraInfo.getStr()); + boost::property_tree::ptree aTree; + boost::property_tree::read_json(aStream, aTree); + boost::property_tree::ptree + handle0 = aTree + .get_child("handles") + .get_child("kinds") + .get_child("rectangle") + .get_child("1") + .begin()->second; + id = handle0.get_child("id").get_value<int>(); + x = handle0.get_child("point").get_child("x").get_value<int>(); + y = handle0.get_child("point").get_child("y").get_value<int>(); +} + +void SwTiledRenderingTest::testMoveShapeHandle() +{ + comphelper::LibreOfficeKit::setActive(); + SwXTextDocument* pXTextDocument = createDoc("shape.fodt"); + + SwWrtShell* pWrtShell = pXTextDocument->GetDocShell()->GetWrtShell(); + pWrtShell->GetSfxViewShell()->registerLibreOfficeKitViewCallback(&SwTiledRenderingTest::callback, this); + SdrPage* pPage = pWrtShell->GetDoc()->getIDocumentDrawModelAccess().GetDrawModel()->GetPage(0); + SdrObject* pObject = pPage->GetObj(0); + pWrtShell->SelectObj(Point(), 0, pObject); + Scheduler::ProcessEventsToIdle(); + + CPPUNIT_ASSERT(!m_ShapeSelection.isEmpty()); + { + int id, x, y; + lcl_extractHandleParameters(m_ShapeSelection, id, x ,y); + int oldX = x; + int oldY = y; + uno::Sequence<beans::PropertyValue> aPropertyValues(comphelper::InitPropertySequence( + { + {"HandleNum", uno::makeAny(id)}, + {"NewPosX", uno::makeAny(x+1)}, + {"NewPosY", uno::makeAny(y+1)} + })); + comphelper::dispatchCommand(".uno:MoveShapeHandle", aPropertyValues); + Scheduler::ProcessEventsToIdle(); + CPPUNIT_ASSERT(!m_ShapeSelection.isEmpty()); + lcl_extractHandleParameters(m_ShapeSelection, id, x ,y); + CPPUNIT_ASSERT_EQUAL(x-1, oldX); + CPPUNIT_ASSERT_EQUAL(y-1, oldY); + } +} + void SwTiledRenderingTest::testDropDownFormFieldButtonNoItem() { SwXTextDocument* pXTextDocument = createDoc("drop_down_form_field_noitem.odt"); _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
