include/oox/drawingml/diagram/diagramhelper_oox.hxx |    4 +
 include/svx/diagram/DiagramHelper_svx.hxx           |    8 +-
 include/svx/diagram/datamodel_svx.hxx               |   19 +++-
 oox/source/drawingml/diagram/datamodel_oox.cxx      |    8 +-
 oox/source/drawingml/diagram/datamodel_oox.hxx      |    2 
 oox/source/drawingml/diagram/diagram.cxx            |    4 -
 oox/source/drawingml/diagram/diagram.hxx            |    2 
 oox/source/drawingml/diagram/diagramhelper_oox.cxx  |   24 ++++--
 svx/source/diagram/DiagramHelper_svx.cxx            |   17 ++--
 svx/source/diagram/datamodel_svx.cxx                |   79 ++++++++++++--------
 10 files changed, 103 insertions(+), 64 deletions(-)

New commits:
commit 8848aafecc9a450915f2db3953a0876467aa24b7
Author:     Armin Le Grand (collabora) <[email protected]>
AuthorDate: Wed Jan 28 18:31:46 2026 +0100
Commit:     Armin Le Grand <[email protected]>
CommitDate: Thu Jan 29 16:27:28 2026 +0100

    SmartArt: Some simplifications/optimizations
    
    Also found a wrong URL in writing the Data DomTree.
    
    Change-Id: I674036410430db9d7d66937c72a6a31acd466cec
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/198326
    Tested-by: Jenkins
    Reviewed-by: Armin Le Grand <[email protected]>

diff --git a/include/oox/drawingml/diagram/diagramhelper_oox.hxx 
b/include/oox/drawingml/diagram/diagramhelper_oox.hxx
index 82195e9381d1..f75a87752991 100644
--- a/include/oox/drawingml/diagram/diagramhelper_oox.hxx
+++ b/include/oox/drawingml/diagram/diagramhelper_oox.hxx
@@ -60,6 +60,10 @@ class DiagramHelper_oox final : public 
svx::diagram::DiagramHelper_svx
         const css::uno::Reference<css::drawing::XShape>& xOldShape,
         const css::uno::Reference<css::drawing::XShape>& xNewShape);
 
+protected:
+    // access associated SdrObjGroup/XShape/RootShape
+    virtual css::uno::Reference< css::drawing::XShape >& accessRootShape() 
override;
+
 public:
     DiagramHelper_oox(
         std::shared_ptr< Diagram > xDiagramPtr,
diff --git a/include/svx/diagram/DiagramHelper_svx.hxx 
b/include/svx/diagram/DiagramHelper_svx.hxx
index a24b8174802e..f6591f598236 100644
--- a/include/svx/diagram/DiagramHelper_svx.hxx
+++ b/include/svx/diagram/DiagramHelper_svx.hxx
@@ -81,8 +81,8 @@ private:
     bool mbForceThemePtrRecreation; // false
 
 protected:
-    // remember associated SdrObjGroup
-    com::sun::star::uno::Reference< com::sun::star::drawing::XShape > 
mxGroupShape;
+    // access associated SdrObjGroup/XShape/RootShape
+    virtual css::uno::Reference< css::drawing::XShape >& accessRootShape() = 0;
 
 public:
     DiagramHelper_svx();
@@ -114,13 +114,13 @@ public:
     bool ForceThemePtrRecreation() const { return mbForceThemePtrRecreation; };
 
     // connect/disconnect to/from Group
-    void connectToSdrObjGroup(com::sun::star::uno::Reference< 
com::sun::star::drawing::XShape >& rTarget);
+    void connectToSdrObjGroup(css::uno::Reference< css::drawing::XShape >& 
rTarget);
     void disconnectFromSdrObjGroup();
 
     static void AddAdditionalVisualization(const SdrObjGroup& rTarget, 
SdrHdlList& rHdlList);
 
     // access to PropertyValues
-    virtual com::sun::star::uno::Any getOOXDomValue(svx::diagram::DomMapFlag 
aDomMapFlag) const = 0;
+    virtual css::uno::Any getOOXDomValue(svx::diagram::DomMapFlag aDomMapFlag) 
const = 0;
 };
 
 }} // end of namespace
diff --git a/include/svx/diagram/datamodel_svx.hxx 
b/include/svx/diagram/datamodel_svx.hxx
index 4587678781fc..357c63245894 100644
--- a/include/svx/diagram/datamodel_svx.hxx
+++ b/include/svx/diagram/datamodel_svx.hxx
@@ -168,6 +168,10 @@ protected:
     DiagramData_svx();
 
 public:
+    // access associated SdrObjGroup/XShape/RootShape
+    css::uno::Reference< css::drawing::XShape >& accessRootShape() { return 
mxRootShape; }
+    const css::uno::Reference< css::drawing::XShape >& accessRootShape() const 
{ return mxRootShape; }
+
     virtual ~DiagramData_svx();
 
     // creates temporary processing data from model data
@@ -185,8 +189,8 @@ public:
     PointsNameMap& getPointsPresNameMap() { return maPointsPresNameMap; }
     ::std::vector<OUString>& getExtDrawings() { return maExtDrawings; }
     const Point* getRootPoint() const;
-    OUString getDiagramString(const css::uno::Reference<css::drawing::XShape>& 
rRootShape) const;
-    std::vector<std::pair<OUString, OUString>> getDiagramChildren(const 
OUString& rParentId, const css::uno::Reference<css::drawing::XShape>& 
rRootShape) const;
+    OUString getDiagramString() const;
+    std::vector<std::pair<OUString, OUString>> getDiagramChildren(const 
OUString& rParentId) const;
 
     const css::uno::Reference< css::xml::dom::XDocument >& getThemeDocument() 
const { return mxThemeDocument; }
     void setThemeDocument( const css::uno::Reference< css::xml::dom::XDocument 
>& xRef ) { mxThemeDocument = xRef; }
@@ -202,15 +206,18 @@ public:
     DiagramDataStatePtr extractDiagramDataState() const;
     void applyDiagramDataState(const DiagramDataStatePtr& rState);
 
-    css::uno::Reference<css::drawing::XShape> getMasterXShapeForPoint(const 
Point& rPoint, const css::uno::Reference<css::drawing::XShape>& rRootShape) 
const;
-    OUString getTextForPoint(const Point& rPoint, const 
css::uno::Reference<css::drawing::XShape>& rRootShape) const;
-    static css::uno::Reference<css::drawing::XShape> getXShapeByModelID(const 
css::uno::Reference<css::drawing::XShape>& rxShape, std::u16string_view 
rModelID);
+    css::uno::Reference<css::drawing::XShape> getMasterXShapeForPoint(const 
Point& rPoint) const;
+    OUString getTextForPoint(const Point& rPoint) const;
+    css::uno::Reference<css::drawing::XShape> 
getXShapeByModelID(std::u16string_view rModelID) const;
 
 protected:
     // helpers
-    void getDiagramChildrenString(OUStringBuffer& rBuf, const Point* pPoint, 
sal_Int32 nLevel, const css::uno::Reference<css::drawing::XShape>& rRootShape) 
const;
+    void getDiagramChildrenString(OUStringBuffer& rBuf, const Point* pPoint, 
sal_Int32 nLevel) const;
     void addConnection(TypeConstant nType, const OUString& sSourceId, const 
OUString& sDestId);
 
+    // remember associated SdrObjGroup/XShape/RootShape
+    css::uno::Reference< css::drawing::XShape > mxRootShape;
+
     // evtl. existing alternative imported visualization identifier
     ::std::vector<OUString>  maExtDrawings;
 
diff --git a/oox/source/drawingml/diagram/datamodel_oox.cxx 
b/oox/source/drawingml/diagram/datamodel_oox.cxx
index 33796886e2e1..2dafea9ff620 100644
--- a/oox/source/drawingml/diagram/datamodel_oox.cxx
+++ b/oox/source/drawingml/diagram/datamodel_oox.cxx
@@ -59,14 +59,14 @@ Shape* DiagramData_oox::getOrCreateAssociatedShape(const 
svx::diagram::Point& rP
     return rShapePtr.get();
 }
 
-void DiagramData_oox::writeDiagramData(oox::core::XmlFilterBase& rFB, 
sax_fastparser::FSHelperPtr& rTarget, const uno::Reference<drawing::XShape>& 
rRootShape)
+void DiagramData_oox::writeDiagramData(oox::core::XmlFilterBase& rFB, 
sax_fastparser::FSHelperPtr& rTarget)
 {
     if (!rTarget)
         return;
 
     // write header infos
     const OUString aNsDmlDiagram(rFB.getNamespaceURL(OOX_NS(dmlDiagram)));
-    const OUString aNsDml(rFB.getNamespaceURL(NMSP_dmlDiagram));
+    const OUString aNsDml(rFB.getNamespaceURL(OOX_NS(dml)));
     rTarget->startElementNS(XML_dgm, XML_dataModel,
         FSNS(XML_xmlns, XML_dgm), aNsDmlDiagram,
         FSNS(XML_xmlns, XML_a), aNsDml);
@@ -85,7 +85,7 @@ void 
DiagramData_oox::writeDiagramData(oox::core::XmlFilterBase& rFB, sax_fastpa
 
         rPoint.writeDiagramData_data(rTarget);
 
-        uno::Reference<drawing::XShape> 
xMasterText(getMasterXShapeForPoint(rPoint, rRootShape));
+        uno::Reference<drawing::XShape> 
xMasterText(getMasterXShapeForPoint(rPoint));
 
         if (xMasterText)
         {
@@ -139,7 +139,7 @@ void 
DiagramData_oox::writeDiagramData(oox::core::XmlFilterBase& rFB, sax_fastpa
     // Diagram::createShapeHierarchyFromModel. This will also allow to use 
existing stuff like standard dialogs
     // and more for later offering changing the Background of a Diagram.
     // Note that an incarnation of BG as XShape is also needed to 'carry' the 
correct Size for that Diagram.
-    uno::Reference<drawing::XShape> xBgShape(getXShapeByModelID(rRootShape, 
getBackgroundShapeModelID()));
+    uno::Reference<drawing::XShape> 
xBgShape(getXShapeByModelID(getBackgroundShapeModelID()));
 
     if (xBgShape.is())
     {
diff --git a/oox/source/drawingml/diagram/datamodel_oox.hxx 
b/oox/source/drawingml/diagram/datamodel_oox.hxx
index 8833cc602a27..7845ffd5bec2 100644
--- a/oox/source/drawingml/diagram/datamodel_oox.hxx
+++ b/oox/source/drawingml/diagram/datamodel_oox.hxx
@@ -50,7 +50,7 @@ public:
 
     Shape* getOrCreateAssociatedShape(const svx::diagram::Point& rPoint, bool 
bCreateOnDemand = false) const;
 
-    void writeDiagramData(oox::core::XmlFilterBase& rFB, 
sax_fastparser::FSHelperPtr& rTarget, const 
css::uno::Reference<css::drawing::XShape>& rRootShape);
+    void writeDiagramData(oox::core::XmlFilterBase& rFB, 
sax_fastparser::FSHelperPtr& rTarget);
 
 private:
     // The model definition, the parts *only* available in oox. Also look for 
already
diff --git a/oox/source/drawingml/diagram/diagram.cxx 
b/oox/source/drawingml/diagram/diagram.cxx
index 3ea5eb1fcfb7..70eccc96c93c 100644
--- a/oox/source/drawingml/diagram/diagram.cxx
+++ b/oox/source/drawingml/diagram/diagram.cxx
@@ -200,7 +200,7 @@ bool Diagram::checkMinimalDataDoms() const
     return true;
 }
 
-void Diagram::tryToCreateMissingDataDoms(oox::core::XmlFilterBase& rFB, const 
uno::Reference<drawing::XShape>& rXRootShape)
+void Diagram::tryToCreateMissingDataDoms(oox::core::XmlFilterBase& rFB)
 {
     // internal testing: allow to force to always recreate
     static bool bForceAlwaysReCreate(false);
@@ -225,7 +225,7 @@ void 
Diagram::tryToCreateMissingDataDoms(oox::core::XmlFilterBase& rFB, const un
         if (xOutput)
         {
             sax_fastparser::FSHelperPtr aFS = 
std::make_shared<sax_fastparser::FastSerializerHelper>(xOutput, true);
-            getData()->writeDiagramData(rFB, aFS, rXRootShape);
+            getData()->writeDiagramData(rFB, aFS);
             xOutput->flush();
 
             // this call is *important*, without it xDocBuilder->parse below 
fails and some strange
diff --git a/oox/source/drawingml/diagram/diagram.hxx 
b/oox/source/drawingml/diagram/diagram.hxx
index 943e33b4e1c4..c97c6699693a 100644
--- a/oox/source/drawingml/diagram/diagram.hxx
+++ b/oox/source/drawingml/diagram/diagram.hxx
@@ -153,7 +153,7 @@ public:
 
     // check if mandatory DiagramDomS exist (or can be created)
     bool checkMinimalDataDoms() const;
-    void tryToCreateMissingDataDoms(oox::core::XmlFilterBase& rFB, const 
css::uno::Reference<css::drawing::XShape>& rXRootShape);
+    void tryToCreateMissingDataDoms(oox::core::XmlFilterBase& rFB);
 
 private:
     // This contains groups of shapes: automatic font size is the same in each 
group.
diff --git a/oox/source/drawingml/diagram/diagramhelper_oox.cxx 
b/oox/source/drawingml/diagram/diagramhelper_oox.cxx
index 2520f5a4a309..42d4af5a9359 100644
--- a/oox/source/drawingml/diagram/diagramhelper_oox.cxx
+++ b/oox/source/drawingml/diagram/diagramhelper_oox.cxx
@@ -74,10 +74,16 @@ void 
DiagramHelper_oox::moveDiagramModelDataFromOldToNewXShape(
     // maybe copy more stuff...
 }
 
+uno::Reference<drawing::XShape>& DiagramHelper_oox::accessRootShape()
+{
+    assert(hasDiagramData() && "Access to XRootShape without DiagramData (!)");
+    return mpDiagramPtr->getData()->accessRootShape();
+}
+
 void DiagramHelper_oox::reLayout()
 {
     SdrObjGroup* pTarget(
-        
dynamic_cast<SdrObjGroup*>(SdrObject::getSdrObjectFromXShape(mxGroupShape)));
+        
dynamic_cast<SdrObjGroup*>(SdrObject::getSdrObjectFromXShape(accessRootShape())));
     if (nullptr == pTarget)
         return;
 
@@ -167,7 +173,7 @@ void DiagramHelper_oox::reLayout()
     xFilter->setDiagramFontHeights(&mpDiagramPtr->getDiagramFontHeights());
 
     // Prepare the target for the to-be-created XShapes
-    uno::Reference<drawing::XShapes> xShapes(mxGroupShape, 
uno::UNO_QUERY_THROW);
+    uno::Reference<drawing::XShapes> xShapes(accessRootShape(), 
uno::UNO_QUERY_THROW);
 
     for (auto const& child : pShapePtr->getChildren())
     {
@@ -274,7 +280,7 @@ OUString DiagramHelper_oox::getDiagramString() const
 {
     if (hasDiagramData())
     {
-        return mpDiagramPtr->getData()->getDiagramString(mxGroupShape);
+        return mpDiagramPtr->getData()->getDiagramString();
     }
 
     return OUString();
@@ -285,7 +291,7 @@ DiagramHelper_oox::getDiagramChildren(const OUString& 
rParentId) const
 {
     if (hasDiagramData())
     {
-        return mpDiagramPtr->getData()->getDiagramChildren(rParentId, 
mxGroupShape);
+        return mpDiagramPtr->getData()->getDiagramChildren(rParentId);
     }
 
     return std::vector<std::pair<OUString, OUString>>();
@@ -362,13 +368,15 @@ void DiagramHelper_oox::TextInformationChange()
 
     DomMapFlags aFlags;
     aFlags.push_back(DomMapFlag::OOXData);
-    // aFlags.push_back(DomMapFlag::OOXDrawing);
-    // aFlags.push_back(DomMapFlag::OOXDataRels);
+    aFlags.push_back(DomMapFlag::OOXDrawing);
+    aFlags.push_back(DomMapFlag::OOXDataImageRels);
+    aFlags.push_back(DomMapFlag::OOXDataHlinkRels);
+    aFlags.push_back(DomMapFlag::OOXDrawingRels);
     mpDiagramPtr->resetOOXDomValues(std::move(aFlags));
 
     // still reset GrabBag at Associated SdrObjGroup object. There are no 
"OOX.*"
     // entries anymore, but others like "mso-rotation-angle" and others
-    uno::Reference<beans::XPropertySet> xPropSet(mxGroupShape, uno::UNO_QUERY);
+    uno::Reference<beans::XPropertySet> xPropSet(accessRootShape(), 
uno::UNO_QUERY);
     if 
(xPropSet->getPropertySetInfo()->hasPropertyByName(u"InteropGrabBag"_ustr))
         xPropSet->setPropertyValue(u"InteropGrabBag"_ustr,
                                    
uno::Any(uno::Sequence<beans::PropertyValue>()));
@@ -466,7 +474,7 @@ void 
DiagramHelper_oox::tryToCreateMissingDataDoms(oox::core::XmlFilterBase& rFB
     if (!mpDiagramPtr)
         return;
 
-    mpDiagramPtr->tryToCreateMissingDataDoms(rFB, mxGroupShape);
+    mpDiagramPtr->tryToCreateMissingDataDoms(rFB);
 }
 }
 
diff --git a/svx/source/diagram/DiagramHelper_svx.cxx 
b/svx/source/diagram/DiagramHelper_svx.cxx
index 94e70d097364..e4ca89d73d4c 100644
--- a/svx/source/diagram/DiagramHelper_svx.cxx
+++ b/svx/source/diagram/DiagramHelper_svx.cxx
@@ -409,7 +409,6 @@ DiagramHelper_svx::DiagramHelper_svx()
 : mbUseDiagramThemeData(false)
 , mbUseDiagramModelData(true)
 , mbForceThemePtrRecreation(false)
-, mxGroupShape()
 {
 }
 
@@ -417,20 +416,22 @@ DiagramHelper_svx::~DiagramHelper_svx() {}
 
 void DiagramHelper_svx::disconnectFromSdrObjGroup()
 {
-    SdrObjGroup* 
pGroupObject(dynamic_cast<SdrObjGroup*>(SdrObject::getSdrObjectFromXShape(mxGroupShape)));
+    uno::Reference< drawing::XShape >& rxRootShape(accessRootShape());
+    SdrObjGroup* 
pGroupObject(dynamic_cast<SdrObjGroup*>(SdrObject::getSdrObjectFromXShape(rxRootShape)));
     if (nullptr != pGroupObject)
     {
-        mxGroupShape.clear();
+        rxRootShape.clear();
         pGroupObject->mp_DiagramHelper.reset();
     }
 }
 
-void DiagramHelper_svx::connectToSdrObjGroup(com::sun::star::uno::Reference< 
com::sun::star::drawing::XShape >& rTarget)
+void DiagramHelper_svx::connectToSdrObjGroup(css::uno::Reference< 
css::drawing::XShape >& rTarget)
 {
     SdrObjGroup* pGroupObject(nullptr);
-    if (mxGroupShape && rTarget == mxGroupShape)
+    uno::Reference< drawing::XShape >& rxRootShape(accessRootShape());
+    if (rxRootShape && rTarget == rxRootShape)
     {
-        pGroupObject = 
dynamic_cast<SdrObjGroup*>(SdrObject::getSdrObjectFromXShape(mxGroupShape));
+        pGroupObject = 
dynamic_cast<SdrObjGroup*>(SdrObject::getSdrObjectFromXShape(rxRootShape));
         if (pGroupObject != nullptr &&  pGroupObject->mp_DiagramHelper.get() 
== this)
         {
             // connection already established
@@ -442,8 +443,8 @@ void 
DiagramHelper_svx::connectToSdrObjGroup(com::sun::star::uno::Reference< com
     disconnectFromSdrObjGroup();
 
     // connect to target
-    mxGroupShape = rTarget;
-    pGroupObject = 
dynamic_cast<SdrObjGroup*>(SdrObject::getSdrObjectFromXShape(mxGroupShape));
+    rxRootShape = rTarget;
+    pGroupObject = 
dynamic_cast<SdrObjGroup*>(SdrObject::getSdrObjectFromXShape(rxRootShape));
     if (nullptr != pGroupObject)
         pGroupObject->mp_DiagramHelper.reset(this);;
 }
diff --git a/svx/source/diagram/datamodel_svx.cxx 
b/svx/source/diagram/datamodel_svx.cxx
index 57787ba78900..6a7bf04612a9 100644
--- a/svx/source/diagram/datamodel_svx.cxx
+++ b/svx/source/diagram/datamodel_svx.cxx
@@ -212,11 +212,11 @@ const Point* DiagramData_svx::getRootPoint() const
     return nullptr;
 }
 
-OUString DiagramData_svx::getDiagramString(const 
css::uno::Reference<css::drawing::XShape>& rRootShape) const
+OUString DiagramData_svx::getDiagramString() const
 {
     OUStringBuffer aBuf;
     const Point* pPoint = getRootPoint();
-    getDiagramChildrenString(aBuf, pPoint, 0, rRootShape);
+    getDiagramChildrenString(aBuf, pPoint, 0);
     return aBuf.makeStringAndClear();
 }
 
@@ -270,9 +270,10 @@ DomMapFlags DiagramData_svx::removeDiagramNode(const 
OUString& rNodeId)
 
     // prepare retval, OOXData and OOXLayout is changed
     aRetval.push_back(DomMapFlag::OOXData);
-    // aRetval.push_back(DomMapFlag::OOXDrawing);
-    // aRetval.push_back(DomMapFlag::OOXDataRels);
-    // aRetval.push_back(DomMapFlag::OOXLayout);
+    aRetval.push_back(DomMapFlag::OOXDrawing);
+    aRetval.push_back(DomMapFlag::OOXDataImageRels);
+    aRetval.push_back(DomMapFlag::OOXDataHlinkRels);
+    aRetval.push_back(DomMapFlag::OOXDrawingRels);
 
     return aRetval;
 }
@@ -307,8 +308,7 @@ void DiagramData_svx::applyDiagramDataState(const 
DiagramDataStatePtr& rState)
 void DiagramData_svx::getDiagramChildrenString(
     OUStringBuffer& rBuf,
     const svx::diagram::Point* pPoint,
-    sal_Int32 nLevel,
-    const css::uno::Reference<css::drawing::XShape>& rRootShape) const
+    sal_Int32 nLevel) const
 {
     if (!pPoint)
         return;
@@ -319,7 +319,7 @@ void DiagramData_svx::getDiagramChildrenString(
             rBuf.append('      ');
         rBuf.append('+');
         rBuf.append(' ');
-        const OUString aText(getTextForPoint(*pPoint, rRootShape));
+        const OUString aText(getTextForPoint(*pPoint));
         rBuf.append(aText);
         rBuf.append('
');
     }
@@ -336,19 +336,16 @@ void DiagramData_svx::getDiagramChildrenString(
         }
 
     for (auto pChild : aChildren)
-        getDiagramChildrenString(rBuf, pChild, nLevel + 1, rRootShape);
+        getDiagramChildrenString(rBuf, pChild, nLevel + 1);
 }
 
-uno::Reference<drawing::XShape> DiagramData_svx::getXShapeByModelID(const 
uno::Reference<drawing::XShape>& rxShape, std::u16string_view rModelID)
+uno::Reference<drawing::XShape> 
DiagramData_svx::getXShapeByModelID(std::u16string_view rModelID) const
 {
-    if (!rxShape)
-        return rxShape;
-
     uno::Reference<drawing::XShape> xRetval;
     if (rModelID.empty())
         return xRetval;
 
-    SdrObject* pCandidate(SdrObject::getSdrObjectFromXShape(rxShape));
+    SdrObject* 
pCandidate(SdrObject::getSdrObjectFromXShape(accessRootShape()));
     if (nullptr == pCandidate)
         return xRetval;
 
@@ -363,27 +360,26 @@ uno::Reference<drawing::XShape> 
DiagramData_svx::getXShapeByModelID(const uno::R
     return xRetval;
 }
 
-uno::Reference<drawing::XShape> DiagramData_svx::getMasterXShapeForPoint(const 
Point& rPoint, const uno::Reference<drawing::XShape>& rRootShape) const
+uno::Reference<drawing::XShape> DiagramData_svx::getMasterXShapeForPoint(const 
Point& rPoint) const
 {
-    if (!rPoint.msPlaceholderText.isEmpty())
+    for (auto& rCandidate : getPoints())
     {
-        for (auto& rCandidate : getPoints())
+        if (!rCandidate.msPresentationAssociationId.isEmpty()
+            && "textNode" == rCandidate.msPresentationLayoutName
+            && rCandidate.msPresentationAssociationId == rPoint.msModelId)
         {
-            if (!rCandidate.msPresentationAssociationId.isEmpty() && 
rCandidate.msPresentationAssociationId == rPoint.msModelId)
-            {
-                uno::Reference<drawing::XShape> xMasterText = 
getXShapeByModelID(rRootShape, rCandidate.msModelId);
-                if (xMasterText)
-                    return xMasterText;
-            }
+            const uno::Reference<drawing::XShape> xMasterText = 
getXShapeByModelID(rCandidate.msModelId);
+            if (xMasterText)
+                return xMasterText;
         }
     }
 
     return uno::Reference<drawing::XShape>();
 }
 
-OUString DiagramData_svx::getTextForPoint(const Point& rPoint, const 
uno::Reference<drawing::XShape>& rRootShape) const
+OUString DiagramData_svx::getTextForPoint(const Point& rPoint) const
 {
-    uno::Reference<drawing::XShape> 
xMasterText(getMasterXShapeForPoint(rPoint, rRootShape));
+    uno::Reference<drawing::XShape> 
xMasterText(getMasterXShapeForPoint(rPoint));
     uno::Reference<text::XText> xText(xMasterText, uno::UNO_QUERY);
 
     if (xText)
@@ -392,7 +388,7 @@ OUString DiagramData_svx::getTextForPoint(const Point& 
rPoint, const uno::Refere
     return OUString();
 }
 
-std::vector<std::pair<OUString, OUString>> 
DiagramData_svx::getDiagramChildren(const OUString& rParentId, const 
uno::Reference<drawing::XShape>& rRootShape) const
+std::vector<std::pair<OUString, OUString>> 
DiagramData_svx::getDiagramChildren(const OUString& rParentId) const
 {
     const OUString sModelId = rParentId.isEmpty() ? getRootPoint()->msModelId 
: rParentId;
     std::vector<std::pair<OUString, OUString>> aChildren;
@@ -404,7 +400,7 @@ std::vector<std::pair<OUString, OUString>> 
DiagramData_svx::getDiagramChildren(c
             const auto pChild = maPointNameMap.find(rCxn.msDestId);
             if (pChild != maPointNameMap.end())
             {
-                const OUString aText(getTextForPoint(*pChild->second, 
rRootShape));
+                const OUString aText(getTextForPoint(*pChild->second));
                 aChildren[rCxn.mnSourceOrder] = std::make_pair(
                     pChild->second->msModelId,
                     aText);
@@ -471,9 +467,10 @@ std::pair<OUString, DomMapFlags> 
DiagramData_svx::addDiagramNode()
 
     // prepare retval, OOXData and OOXLayout is changed
     aRetval.push_back(DomMapFlag::OOXData);
-    // aRetval.push_back(DomMapFlag::OOXDrawing);
-    // aRetval.push_back(DomMapFlag::OOXDataRels);
-    // aRetval.push_back(DomMapFlag::OOXLayout);
+    aRetval.push_back(DomMapFlag::OOXDrawing);
+    aRetval.push_back(DomMapFlag::OOXDataImageRels);
+    aRetval.push_back(DomMapFlag::OOXDataHlinkRels);
+    aRetval.push_back(DomMapFlag::OOXDrawingRels);
 
     return std::make_pair(sNewNodeId, aRetval);
 }
@@ -579,6 +576,28 @@ void DiagramData_svx::buildDiagramDataModel(bool 
/*bClearOoxShapes*/)
         output << "];" << std::endl;
 #endif
 
+        // does currpoint have any text set?
+        const OUString aTextAtPoint(getTextForPoint(point));
+        if(!aTextAtPoint.isEmpty())
+        {
+#ifdef DEBUG_OOX_DIAGRAM
+            static sal_Int32 nCount=0;
+            output << "        "
+                   << "textNode" << nCount
+                   << " ["
+                   << "label=\""
+                   << OUStringToOString(
+                       aTextAtPoint,
+                       RTL_TEXTENCODING_UTF8).getStr()
+                   << "\"" << "];" << std::endl;
+            output << "        "
+                   << normalizeDotName(point.msModelId).getStr()
+                   << " -> "
+                   << "textNode" << nCount++
+                   << ";" << std::endl;
+#endif
+        }
+
         const bool bInserted1 = getPointNameMap().insert(
             std::make_pair(point.msModelId,&point)).second;
 

Reply via email to