diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.co.uk> | 2022-08-10 12:06:42 +0200 |
---|---|---|
committer | Tomaž Vajngerl <quikee@gmail.com> | 2022-08-24 15:40:41 +0200 |
commit | 0d2c6df11e876d1afdf0f9bdfb5e9e0ce7583f68 (patch) | |
tree | a0c01e0882d0eec2afcb234646aba63957166e53 /chart2 | |
parent | 4c789414bf53c4df2b3c798c379adcb493a9e84a (diff) |
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 <quikee@gmail.com>
(cherry picked from commit fcf839cd4b76254d03426a849e17927b2a845352)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/138584
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Diffstat (limited to 'chart2')
-rw-r--r-- | chart2/source/controller/main/ChartController_Insert.cxx | 19 | ||||
-rw-r--r-- | chart2/source/model/main/Diagram.cxx | 5 |
2 files changed, 23 insertions, 1 deletions
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 & ) { |