summaryrefslogtreecommitdiff
path: root/oox
diff options
context:
space:
mode:
authorArmin Le Grand (Allotropia) <Armin.Le.Grand@me.com>2022-04-06 12:03:10 +0200
committerArmin Le Grand <Armin.Le.Grand@me.com>2022-04-06 14:31:01 +0200
commit4e8d6ccf97e29e5ea14e0d074074606f12040f36 (patch)
tree5071e27e6f9b0425b50e72c99c9042b653e24c82 /oox
parentc0f8570361aa4c2b771b758284258f8a8f0246f8 (diff)
Advanced Diagram support: Enhance BackgroundShape handling
The BackgroundShape may have a FillStyle after import, so do handle that FillStyle accordingly. Also enhance breaking the Group by keeping that shape in that case and deactivate Move/Size change lock for it. Also Undo needed. Change-Id: Iccdb236a2311275efc07162fd4bd2cfc252fd437 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132626 Tested-by: Jenkins Reviewed-by: Armin Le Grand <Armin.Le.Grand@me.com>
Diffstat (limited to 'oox')
-rw-r--r--oox/source/drawingml/diagram/datamodel.cxx2
-rw-r--r--oox/source/drawingml/diagram/datamodel.hxx10
-rw-r--r--oox/source/drawingml/diagram/datamodelcontext.cxx2
-rw-r--r--oox/source/drawingml/diagram/diagram.cxx2
-rw-r--r--oox/source/drawingml/diagram/diagramhelper.cxx5
5 files changed, 13 insertions, 8 deletions
diff --git a/oox/source/drawingml/diagram/datamodel.cxx b/oox/source/drawingml/diagram/datamodel.cxx
index 394266ae123d..cc8924228e23 100644
--- a/oox/source/drawingml/diagram/datamodel.cxx
+++ b/oox/source/drawingml/diagram/datamodel.cxx
@@ -126,7 +126,7 @@ void DiagramData::secureDataFromShapeToModelAfterDiagramImport()
DiagramData::DiagramData()
: svx::diagram::DiagramData()
-, mpFillProperties( std::make_shared<FillProperties>() )
+, mpBackgroundFillProperties( std::make_shared<FillProperties>() )
{
}
diff --git a/oox/source/drawingml/diagram/datamodel.hxx b/oox/source/drawingml/diagram/datamodel.hxx
index 95383ad1da77..f7402cb0681e 100644
--- a/oox/source/drawingml/diagram/datamodel.hxx
+++ b/oox/source/drawingml/diagram/datamodel.hxx
@@ -44,7 +44,7 @@ public:
// creates temporary processing data from model data
virtual void buildDiagramDataModel(bool bClearOoxShapes);
- FillPropertiesPtr& getFillProperties() { return mpFillProperties; }
+ FillPropertiesPtr& getBackgroundFillProperties() { return mpBackgroundFillProperties; }
virtual void dump() const;
Shape* getOrCreateAssociatedShape(const svx::diagram::Point& rPoint, bool bCreateOnDemand = false) const;
@@ -56,10 +56,12 @@ public:
protected:
// The model definition, the parts *only* available in oox. Also look for already
// defined ModelData in svx::diagram::DiagramData
- // - FillStyle
- FillPropertiesPtr mpFillProperties;
- // temporary processing data, deleted when using build()
+ // - FillStyle for Diagram Background (empty constructed, may stay empty)
+ FillPropertiesPtr mpBackgroundFillProperties;
+
+ // temporary processing data, deleted when using build(). Association
+ // map between oox::drawingml::Shape and svx::diagram::Point ModelData
PointShapeMap maPointShapeMap;
};
diff --git a/oox/source/drawingml/diagram/datamodelcontext.cxx b/oox/source/drawingml/diagram/datamodelcontext.cxx
index 5715e7d11995..97484c992ad3 100644
--- a/oox/source/drawingml/diagram/datamodelcontext.cxx
+++ b/oox/source/drawingml/diagram/datamodelcontext.cxx
@@ -317,7 +317,7 @@ public:
case A_TOKEN( solidFill ):
// EG_FillProperties
return FillPropertiesContext::createFillContext(
- *this, aElementToken, rAttribs, *mpDataModel->getFillProperties() );
+ *this, aElementToken, rAttribs, *mpDataModel->getBackgroundFillProperties() );
case A_TOKEN( effectDag ):
case A_TOKEN( effectLst ):
// TODO
diff --git a/oox/source/drawingml/diagram/diagram.cxx b/oox/source/drawingml/diagram/diagram.cxx
index 6684ef913995..d12deea33d2f 100644
--- a/oox/source/drawingml/diagram/diagram.cxx
+++ b/oox/source/drawingml/diagram/diagram.cxx
@@ -131,7 +131,7 @@ void Diagram::addTo( const ShapePtr & pParentShape )
pBackground->setSubType(XML_rect);
pBackground->getCustomShapeProperties()->setShapePresetType(XML_rect);
pBackground->setSize(pParentShape->getSize());
- pBackground->getFillProperties() = *mpData->getFillProperties();
+ pBackground->getFillProperties() = *mpData->getBackgroundFillProperties();
pBackground->setLocked(true);
auto& aChildren = pParentShape->getChildren();
aChildren.insert(aChildren.begin(), pBackground);
diff --git a/oox/source/drawingml/diagram/diagramhelper.cxx b/oox/source/drawingml/diagram/diagramhelper.cxx
index 3d2491325722..4ed76e5bff1c 100644
--- a/oox/source/drawingml/diagram/diagramhelper.cxx
+++ b/oox/source/drawingml/diagram/diagramhelper.cxx
@@ -69,7 +69,6 @@ void AdvancedDiagramHelper::reLayout(SdrObjGroup& rTarget)
oox::drawingml::ShapePtr pShapePtr = std::make_shared<Shape>( "com.sun.star.drawing.GroupShape" );
pShapePtr->setDiagramType();
pShapePtr->setSize(maImportSize);
- pShapePtr->getFillProperties() = *mpDiagramPtr->getData()->getFillProperties();
// Re-create the oox::Shapes for the diagram content
mpDiagramPtr->addTo(pShapePtr);
@@ -99,7 +98,11 @@ void AdvancedDiagramHelper::reLayout(SdrObjGroup& rTarget)
uno::Reference< uno::XInterface > const & rUnoModel(rModel.getUnoModel());
css::uno::Reference<css::uno::XComponentContext> xContext(comphelper::getProcessComponentContext());
rtl::Reference<oox::shape::ShapeFilterBase> xFilter(new oox::shape::ShapeFilterBase(xContext));
+
+ // set oox::Theme at Filter. All LineStyle/FillStyle/Colors/Attributes
+ // will be taken from there
xFilter->setCurrentTheme(mpThemePtr);
+
css::uno::Reference< css::lang::XComponent > aComponentModel( rUnoModel, uno::UNO_QUERY );
xFilter->setTargetDocument(aComponentModel);