diff options
author | Grzegorz Araminowicz <grzegorz.araminowicz@collabora.com> | 2019-04-29 13:30:42 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2019-05-14 16:02:26 +0200 |
commit | c61b75eede5ffd6e18a44130eba25e50dccfb1d4 (patch) | |
tree | a14562ebae980bdf75cc7c67ec80a310629bd5e6 /sd/source/ui | |
parent | afb566b6d3b15b013007a71efe0949800aa22666 (diff) |
SmartArt: regenerate diagram command
It removes diagram content and rebuilds shape tree from diagram markup.
Diagram should appear unchanged - editing will be added in future commits.
Change-Id: I6bfc21956a1a23e55d3c7a74384db71d957d690d
Reviewed-on: https://gerrit.libreoffice.org/71584
Tested-by: Jenkins
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Diffstat (limited to 'sd/source/ui')
-rw-r--r-- | sd/source/ui/view/drviews3.cxx | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/sd/source/ui/view/drviews3.cxx b/sd/source/ui/view/drviews3.cxx index 9c2e7d5f5c11..ba88762b4221 100644 --- a/sd/source/ui/view/drviews3.cxx +++ b/sd/source/ui/view/drviews3.cxx @@ -82,10 +82,15 @@ #include <com/sun/star/drawing/framework/XControllerManager.hpp> #include <com/sun/star/drawing/framework/XConfigurationController.hpp> #include <com/sun/star/drawing/framework/XConfiguration.hpp> +#include <com/sun/star/drawing/XShape.hpp> #include <com/sun/star/frame/XFrame.hpp> #include <editeng/lspcitem.hxx> #include <editeng/ulspitem.hxx> #include <memory> +#include <comphelper/processfactory.hxx> +#include <oox/drawingml/diagram/diagram.hxx> +#include <oox/export/drawingml.hxx> +#include <oox/shape/ShapeFilterBase.hxx> using namespace ::com::sun::star::uno; using namespace ::com::sun::star::drawing::framework; @@ -472,6 +477,35 @@ void DrawViewShell::ExecCtrl(SfxRequest& rReq) } break; + case SID_REGENERATE_DIAGRAM: + { + const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList(); + if (rMarkList.GetMarkCount() == 1) + { + SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); + Reference<css::drawing::XShape> xShape(pObj->getUnoShape(), UNO_QUERY); + + if (oox::drawingml::DrawingML::IsDiagram(xShape)) + { + mpDrawView->UnmarkAll(); + pObj->getChildrenOfSdrObject()->ClearSdrObjList(); + + css::uno::Reference<css::uno::XComponentContext> xContext + = comphelper::getProcessComponentContext(); + rtl::Reference<oox::shape::ShapeFilterBase> xFilter( + new oox::shape::ShapeFilterBase(xContext)); + xFilter->setTargetDocument(GetDocSh()->GetModel()); + xFilter->importTheme(); + oox::drawingml::reloadDiagram(xShape, *xFilter); + + mpDrawView->MarkObj(pObj, mpDrawView->GetSdrPageView()); + } + } + + rReq.Done(); + } + break; + default: break; } |