include/xmloff/txtimp.hxx                            |    6 ++--
 sw/qa/extras/odfexport/data/tdf101856_overlapped.odt |binary
 sw/qa/extras/odfexport/odfexport.cxx                 |   24 +++++++++++++++++++
 xmloff/source/text/XMLTextMarkImportContext.cxx      |   10 +++----
 xmloff/source/text/txtimp.cxx                        |   19 +++++++--------
 5 files changed, 41 insertions(+), 18 deletions(-)

New commits:
commit 92e91039d004c2214b844c0256caf4271b8d28d2
Author:     Serge Krot <serge.k...@cib.de>
AuthorDate: Tue Aug 28 14:32:14 2018 +0200
Commit:     Thorsten Behrens <thorsten.behr...@cib.de>
CommitDate: Wed Aug 29 14:00:43 2018 +0200

    tdf#101856 Handle properties of nested bookmarks
    
    Change-Id: I1a92d2001e58751c5bbe41f6480f4c46dcc8c9e7
    Reviewed-on: https://gerrit.libreoffice.org/59704
    Reviewed-by: Thorsten Behrens <thorsten.behr...@cib.de>
    Tested-by: Thorsten Behrens <thorsten.behr...@cib.de>

diff --git a/include/xmloff/txtimp.hxx b/include/xmloff/txtimp.hxx
index ab2aef9816d5..7366857af514 100644
--- a/include/xmloff/txtimp.hxx
+++ b/include/xmloff/txtimp.hxx
@@ -722,9 +722,9 @@ public:
     void AddCrossRefHeadingMapping(OUString const& rFrom, OUString const& rTo);
     void MapCrossRefHeadingFieldsHorribly();
 
-    void setBookmarkAttributes(bool hidden, OUString const& condition);
-    bool getBookmarkHidden();
-    const OUString& getBookmarkCondition();
+    void setBookmarkAttributes(OUString const& bookmark, bool hidden, OUString 
const& condition);
+    bool getBookmarkHidden(OUString const& bookmark) const;
+    const OUString& getBookmarkCondition(OUString const& bookmark) const;
 
 };
 
diff --git a/sw/qa/extras/odfexport/data/tdf101856_overlapped.odt 
b/sw/qa/extras/odfexport/data/tdf101856_overlapped.odt
new file mode 100644
index 000000000000..c05df538da52
Binary files /dev/null and 
b/sw/qa/extras/odfexport/data/tdf101856_overlapped.odt differ
diff --git a/sw/qa/extras/odfexport/odfexport.cxx 
b/sw/qa/extras/odfexport/odfexport.cxx
index e49c359eeb2a..fbb9df3a9f9d 100644
--- a/sw/qa/extras/odfexport/odfexport.cxx
+++ b/sw/qa/extras/odfexport/odfexport.cxx
@@ -967,6 +967,30 @@ DECLARE_ODFEXPORT_TEST(testImageMimetype, 
"image-mimetype.odt")
 #endif
 
 // MAILMERGE Add conditional to expand / collapse bookmarks
+DECLARE_ODFEXPORT_TEST(tdf101856_overlapped, "tdf101856_overlapped.odt")
+{
+    // get bookmark interface
+    uno::Reference<text::XBookmarksSupplier> xBookmarksSupplier(mxComponent, 
uno::UNO_QUERY);
+    uno::Reference<container::XIndexAccess> 
xBookmarksByIdx(xBookmarksSupplier->getBookmarks(), uno::UNO_QUERY);
+    uno::Reference<container::XNameAccess> 
xBookmarksByName(xBookmarksSupplier->getBookmarks(), uno::UNO_QUERY);
+
+    // check: we have 2 bookmarks
+    CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2), 
xBookmarksByIdx->getCount());
+    CPPUNIT_ASSERT(xBookmarksByName->hasByName("BookmarkNonHidden"));
+    CPPUNIT_ASSERT(xBookmarksByName->hasByName("BookmarkHidden"));
+
+    // <text:bookmark-start text:name="BookmarkNonHidden"/>
+    uno::Reference<beans::XPropertySet> 
xBookmark1(xBookmarksByName->getByName("BookmarkNonHidden"), uno::UNO_QUERY);
+    CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty<OUString>(xBookmark1, 
UNO_NAME_BOOKMARK_CONDITION));
+    CPPUNIT_ASSERT_EQUAL(false, getProperty<bool>(xBookmark1, 
UNO_NAME_BOOKMARK_HIDDEN));
+
+    // <text:bookmark-start text:name="BookmarkHidden"/>
+    uno::Reference<beans::XPropertySet> 
xBookmark2(xBookmarksByName->getByName("BookmarkHidden"), uno::UNO_QUERY);
+    CPPUNIT_ASSERT_EQUAL(OUString(""), getProperty<OUString>(xBookmark2, 
UNO_NAME_BOOKMARK_CONDITION));
+    CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xBookmark2, 
UNO_NAME_BOOKMARK_HIDDEN));
+}
+
+// MAILMERGE Add conditional to expand / collapse bookmarks
 DECLARE_ODFEXPORT_TEST(tdf101856, "tdf101856.odt")
 {
     // get bookmark interface
diff --git a/xmloff/source/text/XMLTextMarkImportContext.cxx 
b/xmloff/source/text/XMLTextMarkImportContext.cxx
index 5e30b56b65cc..25853d68beb8 100644
--- a/xmloff/source/text/XMLTextMarkImportContext.cxx
+++ b/xmloff/source/text/XMLTextMarkImportContext.cxx
@@ -176,9 +176,9 @@ void XMLTextMarkImportContext::StartElement(
 
     if (IsXMLToken(GetLocalName(), XML_BOOKMARK_START))
     {
-        OUString sHidden = xAttrList->getValueByName("loext:hidden");
-        OUString sCondition = xAttrList->getValueByName("loext:condition");
-        m_rHelper.setBookmarkAttributes(sHidden == "true", sCondition);
+        const OUString sHidden    = xAttrList->getValueByName("loext:hidden");
+        const OUString sCondition = 
xAttrList->getValueByName("loext:condition");
+        m_rHelper.setBookmarkAttributes(m_sBookmarkName, sHidden == "true", 
sCondition);
     }
 }
 
@@ -363,8 +363,8 @@ void XMLTextMarkImportContext::EndElement()
                                 const Reference<XPropertySet> 
xPropertySet(xContent, UNO_QUERY);
                                 if (xPropertySet.is())
                                 {
-                                    
xPropertySet->setPropertyValue("BookmarkHidden",    
uno::Any(m_rHelper.getBookmarkHidden()));
-                                    
xPropertySet->setPropertyValue("BookmarkCondition", 
uno::Any(m_rHelper.getBookmarkCondition()));
+                                    
xPropertySet->setPropertyValue("BookmarkHidden",    
uno::Any(m_rHelper.getBookmarkHidden(m_sBookmarkName)));
+                                    
xPropertySet->setPropertyValue("BookmarkCondition", 
uno::Any(m_rHelper.getBookmarkCondition(m_sBookmarkName)));
                                 }
                             }
 
diff --git a/xmloff/source/text/txtimp.cxx b/xmloff/source/text/txtimp.cxx
index 8692e505caba..95a8e5c272f8 100644
--- a/xmloff/source/text/txtimp.cxx
+++ b/xmloff/source/text/txtimp.cxx
@@ -543,8 +543,8 @@ struct XMLTextImportHelper::Impl
     // Used for frame deduplication, the name of the last frame imported 
directly before the current one
     OUString msLastImportedFrameName;
 
-    bool m_bBookmarkHidden;
-    OUString m_sBookmarkCondition;
+    std::map< OUString, bool > m_bBookmarkHidden;
+    std::map< OUString, OUString > m_sBookmarkCondition;
 
     uno::Reference<text::XText> m_xText;
     uno::Reference<text::XTextCursor> m_xCursor;
@@ -590,7 +590,6 @@ struct XMLTextImportHelper::Impl
                 bool const bProgress, bool const bBlockMode,
                 bool const bOrganizerMode)
         :   m_xTextListsHelper( new XMLTextListsHelper() )
-        ,   m_bBookmarkHidden( false )
         // XML import: reconstrution of assignment of paragraph style to 
outline levels (#i69629#)
         ,   m_xServiceFactory( rModel, UNO_QUERY )
         ,   m_rSvXMLImport( rImport )
@@ -2940,20 +2939,20 @@ void 
XMLTextImportHelper::MapCrossRefHeadingFieldsHorribly()
     }
 }
 
-void XMLTextImportHelper::setBookmarkAttributes(bool hidden, OUString const& 
condition)
+void XMLTextImportHelper::setBookmarkAttributes(OUString const& bookmark, bool 
hidden, OUString const& condition)
 {
-    m_xImpl->m_bBookmarkHidden = hidden;
-    m_xImpl->m_sBookmarkCondition = condition;
+    m_xImpl->m_bBookmarkHidden[bookmark] = hidden;
+    m_xImpl->m_sBookmarkCondition[bookmark] = condition;
 }
 
-bool XMLTextImportHelper::getBookmarkHidden()
+bool XMLTextImportHelper::getBookmarkHidden(OUString const& bookmark) const
 {
-    return m_xImpl->m_bBookmarkHidden;
+    return m_xImpl->m_bBookmarkHidden[bookmark];
 }
 
-const OUString& XMLTextImportHelper::getBookmarkCondition()
+const OUString& XMLTextImportHelper::getBookmarkCondition(OUString const& 
bookmark) const
 {
-    return m_xImpl->m_sBookmarkCondition;
+    return m_xImpl->m_sBookmarkCondition[bookmark];
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to