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 & )
     {

Reply via email to