summaryrefslogtreecommitdiff
path: root/oox
diff options
context:
space:
mode:
authorArmin Le Grand (Allotropia) <Armin.Le.Grand@me.com>2022-05-10 15:59:29 +0200
committerArmin Le Grand <Armin.Le.Grand@me.com>2022-05-11 14:17:34 +0200
commit1e016920769ae524575e40b1ec317c700ba0daa3 (patch)
tree24dc1a6cb9f35ea07879564eb82376fcb0fbd313 /oox
parent5b9b07dcb3e0065ddb616a0a5b0e69c1c3841fa7 (diff)
Advanced Diagram support: UNDO/REDO support for Diagram DataModel
Added support for UNDO/REDO for changes in Diagram ModelData. This is currenly applied/used in the DiagramDialog for it's Add/Remove actions (also supports Cancel of that dialog 1st time ever). But it is defined more general to add/support manipulating actions like clone/change_text etc. Also the UI/dialog at he end will not be/stay modal, so this is a test implemenation how to use it. It uses an extract/apply mechanism to get/set the Diagram ModelData at/for the UNDO action. That may be expanded as needed for additional data in he future. It may also be considered to modify the Connection/Point ModelData to shared_ptr internally completely to avoid copying these at all. OTOH it is not that much data to handle at all. Change-Id: I4702ed908b79a476177fe66c0e3284898c6adda5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134118 Tested-by: Jenkins Reviewed-by: Armin Le Grand <Armin.Le.Grand@me.com>
Diffstat (limited to 'oox')
-rw-r--r--oox/source/drawingml/diagram/diagramhelper.cxx20
-rw-r--r--oox/source/drawingml/diagram/diagramhelper.hxx8
2 files changed, 28 insertions, 0 deletions
diff --git a/oox/source/drawingml/diagram/diagramhelper.cxx b/oox/source/drawingml/diagram/diagramhelper.cxx
index 0164ce0845d3..7859a9667e7b 100644
--- a/oox/source/drawingml/diagram/diagramhelper.cxx
+++ b/oox/source/drawingml/diagram/diagramhelper.cxx
@@ -198,6 +198,26 @@ bool AdvancedDiagramHelper::removeNode(const OUString& rNodeId)
return bRetval;
}
+svx::diagram::DiagramDataStatePtr AdvancedDiagramHelper::extractDiagramDataState() const
+{
+ if(!mpDiagramPtr)
+ {
+ return svx::diagram::DiagramDataStatePtr();
+ }
+
+ return mpDiagramPtr->getData()->extractDiagramDataState();
+}
+
+void AdvancedDiagramHelper::applyDiagramDataState(const svx::diagram::DiagramDataStatePtr& rState)
+{
+ if(!mpDiagramPtr)
+ {
+ return;
+ }
+
+ mpDiagramPtr->getData()->applyDiagramDataState(rState);
+}
+
void AdvancedDiagramHelper::doAnchor(SdrObjGroup& rTarget, ::oox::drawingml::Shape& rRootShape)
{
if(!mpDiagramPtr)
diff --git a/oox/source/drawingml/diagram/diagramhelper.hxx b/oox/source/drawingml/diagram/diagramhelper.hxx
index cede1aeeccf9..e47047746776 100644
--- a/oox/source/drawingml/diagram/diagramhelper.hxx
+++ b/oox/source/drawingml/diagram/diagramhelper.hxx
@@ -25,6 +25,10 @@
#include <oox/shape/ShapeFilterBase.hxx>
#include <svx/svdogrp.hxx>
+namespace svx { namespace diagram {
+ class DiagramDataState;
+}}
+
namespace oox::drawingml {
class Diagram;
@@ -73,6 +77,10 @@ public:
virtual OUString addNode(const OUString& rText) override;
virtual bool removeNode(const OUString& rNodeId) override;
+ // Undo/Redo helpers to extract/restore Diagram-defining data
+ virtual std::shared_ptr< svx::diagram::DiagramDataState > extractDiagramDataState() const override;
+ virtual void applyDiagramDataState(const std::shared_ptr< svx::diagram::DiagramDataState >& rState) override;
+
void doAnchor(SdrObjGroup& rTarget, ::oox::drawingml::Shape& rRootShape);
std::shared_ptr< ::oox::drawingml::Theme > getOrCreateThemePtr(
rtl::Reference< oox::shape::ShapeFilterBase>& rxFilter ) const;