summaryrefslogtreecommitdiff
path: root/chart2
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2022-08-10 12:06:42 +0200
committerTomaž Vajngerl <quikee@gmail.com>2022-08-24 15:40:41 +0200
commit0d2c6df11e876d1afdf0f9bdfb5e9e0ce7583f68 (patch)
treea0c01e0882d0eec2afcb234646aba63957166e53 /chart2
parent4c789414bf53c4df2b3c798c379adcb493a9e84a (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.cxx19
-rw-r--r--chart2/source/model/main/Diagram.cxx5
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 & )
{