chart2/source/controller/main/ChartController_Insert.cxx | 19 ++++++++++++++- chart2/source/model/main/Diagram.cxx | 5 +++ 2 files changed, 23 insertions(+), 1 deletion(-)
New commits: commit 0d2c6df11e876d1afdf0f9bdfb5e9e0ce7583f68 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Wed Aug 10 12:06:42 2022 +0200 Commit: Tomaž Vajngerl <qui...@gmail.com> CommitDate: Wed Aug 24 15:40:41 2022 +0200 chart2: Add undo/redo for the data table Change-Id: I6b25a7a82957705481952bc3cd181a6d0c1fce0e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/138298 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <qui...@gmail.com> (cherry picked from commit fcf839cd4b76254d03426a849e17927b2a845352) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/138584 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> diff --git a/chart2/source/controller/main/ChartController_Insert.cxx b/chart2/source/controller/main/ChartController_Insert.cxx index 40f0675d76af..02c0e681579a 100644 --- a/chart2/source/controller/main/ChartController_Insert.cxx +++ b/chart2/source/controller/main/ChartController_Insert.cxx @@ -162,6 +162,9 @@ void ChartController::executeDispatch_InsertGrid() void ChartController::executeDispatch_OpenInsertDataTableDialog() { SolarMutexGuard aGuard; + auto aUndoDescription = ActionDescriptionProvider::createDescription(ActionDescriptionProvider::ActionType::Insert, SchResId(STR_OBJECT_DATA_TABLE)); + UndoGuard aUndoGuard(aUndoDescription, m_xUndoManager); + uno::Reference<chart2::XDiagram> xDiagram = ChartModelHelper::findDiagram(getModel()); InsertDataTableDialog aDialog(GetChartFrame()); @@ -196,12 +199,14 @@ void ChartController::executeDispatch_OpenInsertDataTableDialog() // show the dialog if (aDialog.run() == RET_OK) { - auto& rDialogData = aDialog.getDataTableDialogData(); + bool bChanged = false; + auto& rDialogData = aDialog.getDataTableDialogData(); auto xDataTable = xDiagram->getDataTable(); if (!rDialogData.mbShow && xDataTable.is()) { xDiagram->setDataTable(uno::Reference<chart2::XDataTable>()); + bChanged = true; } else if (rDialogData.mbShow && !xDataTable.is()) { @@ -209,6 +214,7 @@ void ChartController::executeDispatch_OpenInsertDataTableDialog() if (xNewDataTable.is()) { xDiagram->setDataTable(xNewDataTable); + bChanged = true; } } @@ -221,13 +227,20 @@ void ChartController::executeDispatch_OpenInsertDataTableDialog() xProperties->setPropertyValue("VBorder" , uno::Any(rDialogData.mbVerticalBorders)); xProperties->setPropertyValue("Outline" , uno::Any(rDialogData.mbOutline)); xProperties->setPropertyValue("Keys" , uno::Any(rDialogData.mbKeys)); + bChanged = true; } + + if (bChanged) + aUndoGuard.commit(); } } void ChartController::executeDispatch_InsertDataTable() { SolarMutexGuard aGuard; + auto aUndoDescription = ActionDescriptionProvider::createDescription(ActionDescriptionProvider::ActionType::Insert, SchResId(STR_OBJECT_DATA_TABLE)); + UndoGuard aUndoGuard(aUndoDescription, m_xUndoManager); + uno::Reference<chart2::XDiagram> xDiagram = ChartModelHelper::findDiagram(getModel()); auto xDataTable = xDiagram->getDataTable(); if (!xDataTable.is()) @@ -236,6 +249,7 @@ void ChartController::executeDispatch_InsertDataTable() if (xNewDataTable.is()) { xDiagram->setDataTable(xNewDataTable); + aUndoGuard.commit(); } } } @@ -243,11 +257,14 @@ void ChartController::executeDispatch_InsertDataTable() void ChartController::executeDispatch_DeleteDataTable() { SolarMutexGuard aGuard; + auto aUndoDescription = ActionDescriptionProvider::createDescription(ActionDescriptionProvider::ActionType::Delete, SchResId(STR_OBJECT_DATA_TABLE)); + UndoGuard aUndoGuard(aUndoDescription, m_xUndoManager); uno::Reference<chart2::XDiagram> xDiagram = ChartModelHelper::findDiagram(getModel()); auto xDataTable = xDiagram->getDataTable(); if (xDataTable.is()) { xDiagram->setDataTable(uno::Reference<chart2::XDataTable>()); + aUndoGuard.commit(); } } diff --git a/chart2/source/model/main/Diagram.cxx b/chart2/source/model/main/Diagram.cxx index 2a310863aca6..518a765820c7 100644 --- a/chart2/source/model/main/Diagram.cxx +++ b/chart2/source/model/main/Diagram.cxx @@ -264,10 +264,14 @@ Diagram::Diagram( const Diagram & rOther ) : m_xTitle.set( CloneHelper::CreateRefClone< chart2::XTitle >()( rOther.m_xTitle )); m_xLegend.set( CloneHelper::CreateRefClone< chart2::XLegend >()( rOther.m_xLegend )); + if (rOther.m_xDataTable.is()) + m_xDataTable.set(new DataTable(*rOther.m_xDataTable)); + ModifyListenerHelper::addListener( m_xWall, m_xModifyEventForwarder ); ModifyListenerHelper::addListener( m_xFloor, m_xModifyEventForwarder ); ModifyListenerHelper::addListener( m_xTitle, m_xModifyEventForwarder ); ModifyListenerHelper::addListener( m_xLegend, m_xModifyEventForwarder ); + ModifyListenerHelper::addListener(uno::Reference<chart2::XDataTable>(m_xDataTable), m_xModifyEventForwarder ); } Diagram::~Diagram() @@ -280,6 +284,7 @@ Diagram::~Diagram() ModifyListenerHelper::removeListener( m_xFloor, m_xModifyEventForwarder ); ModifyListenerHelper::removeListener( m_xTitle, m_xModifyEventForwarder ); ModifyListenerHelper::removeListener( m_xLegend, m_xModifyEventForwarder ); + ModifyListenerHelper::removeListener( uno::Reference<chart2::XDataTable>(m_xDataTable), m_xModifyEventForwarder ); } catch( const uno::Exception & ) {