Files
odfstudio/oox/source/drawingml/diagram/datamodel_oox.hxx
T
Armin Le Grand (collabora) bd047bbb9e SmartArt: Preparations for roundtrip
The DiagramModel uses 4 mandatory and three optional XMLDoms
for it's data. These get imported, but to get to a roundtrip
we will need to be able to create & save these again.

Last changes prepared this by deleting XMLDoms which were no
longer valid dependent of changes done to that DiagramModel.
When exporting the availability of these gets checked and if
all are there, it gets exported as Diagram (in MSO format,
not yet in ODF). If nothing was changed the original Doms
get exported - untouched.

That test will now try - if e.g. the most important XMLDom
OOXData is missing - to re-create this in that action. The 1st
one which I now implemented that is the OOXData which homes
the Point/Connections/BGFill data (and some more).

Due to this needing testing I for now encapsulated this
to a EnvVar called ACTIVATE_RECREATE_DIAGRAM_DATADOMS, so
this will for now only happen when this is set. Anyways all
that stuff is still behind the 'experimental features' wall.
This is and stays experimental for now.

These are already deep changes which need to get tested and
get to master, opening the path to experiment with it and
refine it. Due to the EnvVar gate no real changes should
happen in master, but due to the changes around it this
will need to be checked this way.

Change-Id: Iabba69b19387e45f1028843a25f3bae1fc4f8fe8
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/197676
Tested-by: Jenkins
Reviewed-by: Armin Le Grand <Armin.Le.Grand@me.com>
2026-01-22 10:59:37 +01:00

85 lines
3.2 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef INCLUDED_OOX_SOURCE_DRAWINGML_DIAGRAM_DATAMODEL_HXX
#define INCLUDED_OOX_SOURCE_DRAWINGML_DIAGRAM_DATAMODEL_HXX
#include <map>
#include <memory>
#include <vector>
#include <rtl/ustring.hxx>
#include <svx/diagram/datamodel_svx.hxx>
#include <oox/drawingml/drawingmltypes.hxx>
#include <oox/helper/helper.hxx>
#include <oox/token/tokens.hxx>
#include <oox/shape/ShapeFilterBase.hxx>
namespace oox::drawingml {
class DiagramData_oox : public svx::diagram::DiagramData_svx
{
public:
typedef std::map< OUString, ShapePtr > PointShapeMap;
DiagramData_oox();
virtual ~DiagramData_oox();
// creates temporary processing data from model data
virtual void buildDiagramDataModel(bool bClearOoxShapes);
FillPropertiesPtr& getBackgroundShapeFillProperties() { return mpBackgroundShapeFillProperties; }
virtual void dump() const;
Shape* getOrCreateAssociatedShape(const svx::diagram::Point& rPoint, bool bCreateOnDemand = false) const;
// get/set data between Diagram DataModel and oox::drawingml::Shape
void secureDataFromShapeToModelAfterDiagramImport(::oox::drawingml::Shape& rRootShape);
void restoreDataFromShapeToModelAfterDiagramImport(::oox::drawingml::Shape& rRootShape);
static void restoreDataFromModelToShapeAfterReCreation(const svx::diagram::Point& rPoint, Shape& rNewShape);
void writeDiagramData(oox::core::XmlFilterBase& rFB, sax_fastparser::FSHelperPtr& rTarget, const css::uno::Reference<css::drawing::XShape>& rXShape);
protected:
void secureStyleDataFromShapeToModel(::oox::drawingml::Shape& rShape);
void restoreStyleDataFromShapeToModel(::oox::drawingml::Shape& rShape);
private:
// The model definition, the parts *only* available in oox. Also look for already
// defined ModelData in svx::diagram::DiagramData_svx
// - FillStyle for Diagram Background (empty constructed, may stay empty)
FillPropertiesPtr mpBackgroundShapeFillProperties;
// temporary processing data, deleted when using build(). Association
// map between oox::drawingml::Shape and svx::diagram::Point ModelData
PointShapeMap maPointShapeMap;
};
// Oox-local definition of DiagramData_oox. Doing and using this on Oox
// allows to do much less static_cast(s) - if at all from svx::diagram::DiagramData_svx
typedef std::shared_ptr< DiagramData_oox > OoxDiagramDataPtr;
}
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */