[Libreoffice-commits] core.git: oox/source

Grzegorz Araminowicz (via logerrit) logerrit at kemper.freedesktop.org
Sun Aug 18 16:10:27 UTC 2019


 oox/source/drawingml/diagram/diagram.cxx |   38 +++++++++++++++++++++++++++++++
 oox/source/drawingml/diagram/diagram.hxx |    4 ++-
 2 files changed, 41 insertions(+), 1 deletion(-)

New commits:
commit 8639ef9b70b8242651ef4d1a3b23b8c8eeeda52b
Author:     Grzegorz Araminowicz <grzegorz.araminowicz at collabora.com>
AuthorDate: Sun Aug 18 16:27:54 2019 +0200
Commit:     Grzegorz Araminowicz <grzegorz.araminowicz at collabora.com>
CommitDate: Sun Aug 18 18:09:28 2019 +0200

    SmartArt: implement DiagramData::getString()
    
    Allows to get data representation of diagram as text.
    It will be useful as a starting point for displaying data on diagram dialog.
    
    Change-Id: I9765d7de64a68224a6d36b7c3bc4862ce6610bdf
    Reviewed-on: https://gerrit.libreoffice.org/77669
    Tested-by: Jenkins
    Reviewed-by: Grzegorz Araminowicz <grzegorz.araminowicz at collabora.com>

diff --git a/oox/source/drawingml/diagram/diagram.cxx b/oox/source/drawingml/diagram/diagram.cxx
index 2c0c47899ffa..fb1fc916c349 100644
--- a/oox/source/drawingml/diagram/diagram.cxx
+++ b/oox/source/drawingml/diagram/diagram.cxx
@@ -100,6 +100,44 @@ void DiagramData::dump() const
         rPoint.dump();
 }
 
+void DiagramData::getChildrenString(OUStringBuffer& rBuf, const dgm::Point* pPoint, sal_Int32 nLevel) const
+{
+    if (!pPoint)
+        return;
+
+    if (nLevel > 0)
+    {
+        for (sal_Int32 i = 0; i < nLevel-1; i++)
+            rBuf.append('\t');
+        rBuf.append('+');
+        rBuf.append(' ');
+        rBuf.append(pPoint->mpShape->getTextBody()->getParagraphs().front()->getRuns().front()->getText());
+        rBuf.append('\n');
+    }
+
+    std::vector<const dgm::Point*> aChildren;
+    for (const auto& rCxn : maConnections)
+        if (rCxn.mnType == XML_parOf && rCxn.msSourceId == pPoint->msModelId)
+        {
+            if (rCxn.mnSourceOrder >= static_cast<sal_Int32>(aChildren.size()))
+                aChildren.resize(rCxn.mnSourceOrder + 1);
+            const auto pChild = maPointNameMap.find(rCxn.msDestId);
+            if (pChild != maPointNameMap.end())
+                aChildren[rCxn.mnSourceOrder] = pChild->second;
+        }
+
+    for (auto pChild : aChildren)
+        getChildrenString(rBuf, pChild, nLevel + 1);
+}
+
+OUString DiagramData::getString() const
+{
+    OUStringBuffer aBuf;
+    const dgm::Point* pPoint = getRootPoint();
+    getChildrenString(aBuf, pPoint, 0);
+    return aBuf.makeStringAndClear();
+}
+
 #ifdef DEBUG_OOX_DIAGRAM
 OString normalizeDotName( const OUString& rStr )
 {
diff --git a/oox/source/drawingml/diagram/diagram.hxx b/oox/source/drawingml/diagram/diagram.hxx
index 656caacadb3a..62609b39fab1 100644
--- a/oox/source/drawingml/diagram/diagram.hxx
+++ b/oox/source/drawingml/diagram/diagram.hxx
@@ -192,9 +192,11 @@ public:
         { return maExtDrawings; }
     const dgm::Point* getRootPoint() const;
     void dump() const;
-    OUString getString() const override { return OUString(); }
+    OUString getString() const override;
 
 private:
+    void getChildrenString(OUStringBuffer& rBuf, const dgm::Point* pPoint, sal_Int32 nLevel) const;
+
     ::std::vector<OUString>  maExtDrawings;
     FillPropertiesPtr mpFillProperties;
     dgm::Connections  maConnections;


More information about the Libreoffice-commits mailing list