diff options
author | Armin Le Grand (Allotropia) <Armin.Le.Grand@me.com> | 2022-05-10 15:59:29 +0200 |
---|---|---|
committer | Armin Le Grand <Armin.Le.Grand@me.com> | 2022-05-11 14:17:34 +0200 |
commit | 1e016920769ae524575e40b1ec317c700ba0daa3 (patch) | |
tree | 24dc1a6cb9f35ea07879564eb82376fcb0fbd313 /oox | |
parent | 5b9b07dcb3e0065ddb616a0a5b0e69c1c3841fa7 (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.cxx | 20 | ||||
-rw-r--r-- | oox/source/drawingml/diagram/diagramhelper.hxx | 8 |
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; |