From 5a4efb30035bfb247a23004e5c99dc9cab6dbabe Mon Sep 17 00:00:00 2001
From: Rafael Dominguez <venccsralph@gmail.com>
Date: Tue, 27 Mar 2012 21:35:48 -0430
Subject: [PATCH 20/31] Overload SdDrawDocument::InsertBookmark to use vector instead of List.

---
 sd/inc/drawdoc.hxx          |    6 +++
 sd/source/core/drawdoc3.cxx |   75 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 81 insertions(+), 0 deletions(-)

diff --git a/sd/inc/drawdoc.hxx b/sd/inc/drawdoc.hxx
index 6006542..9c581f5 100644
--- a/sd/inc/drawdoc.hxx
+++ b/sd/inc/drawdoc.hxx
@@ -273,6 +273,12 @@ public:
                                         ::sd::DrawDocShell* pBookmarkDocSh, sal_Bool bCopy,
                                         Point* pObjPos);
 
+    sal_Bool InsertBookmark(const std::vector<rtl::OUString> &rBookmarkList,
+                            std::vector<rtl::OUString> &rExchangeList, sal_Bool bLink,
+                            sal_Bool bReplace, sal_uInt16 nPgPos, sal_Bool bNoDialogs,
+                            ::sd::DrawDocShell* pBookmarkDocSh, sal_Bool bCopy,
+                            Point* pObjPos);
+
     bool IsStartWithPresentation() const;
     void SetStartWithPresentation( bool bStartWithPresentation );
 
diff --git a/sd/source/core/drawdoc3.cxx b/sd/source/core/drawdoc3.cxx
index 46bd6ca..2549a2d 100644
--- a/sd/source/core/drawdoc3.cxx
+++ b/sd/source/core/drawdoc3.cxx
@@ -439,6 +439,81 @@ sal_Bool SdDrawDocument::InsertBookmark(
     return bOK;
 }
 
+sal_Bool SdDrawDocument::InsertBookmark(
+    const std::vector<rtl::OUString> &rBookmarkList,    // Liste der Namen der einzufuegenden Bookmarks
+    std::vector<rtl::OUString> &rExchangeList,          // Liste der zu verwendenen Namen
+    sal_Bool bLink,                                     // Bookmarks sollen als Verknuepfung eingefuegt werden
+    sal_Bool bReplace,                                  // Aktuellen Seiten (Standard&Notiz) werden ersetzt
+    sal_uInt16 nInsertPos,                              // Einfuegeposition fuer Seiten
+    sal_Bool bNoDialogs,                                // Keine Dialoge anzeigen
+    ::sd::DrawDocShell* pBookmarkDocSh,                 // Wenn gesetzt, so ist dieses das Source-Dokument
+    sal_Bool bCopy,                                     // Seiten werden kopiert
+    Point* pObjPos)                                     // Einfuegeposition fuer Objekte
+{
+    sal_Bool bOK = sal_True;
+    sal_Bool bInsertPages = sal_False;
+
+    if (rBookmarkList.empty())
+    {
+        /**********************************************************************
+        * Alle Seiten werden eingefuegt
+        **********************************************************************/
+        bInsertPages = sal_True;
+    }
+    else
+    {
+        SdDrawDocument* pBookmarkDoc = NULL;
+        String aBookmarkName;
+
+        if (pBookmarkDocSh)
+        {
+            pBookmarkDoc = pBookmarkDocSh->GetDoc();
+            aBookmarkName = pBookmarkDocSh->GetMedium()->GetName();
+        }
+        else if ( mxBookmarkDocShRef.Is() )
+        {
+            pBookmarkDoc = mxBookmarkDocShRef->GetDoc();
+            aBookmarkName = maBookmarkFile;
+        }
+        else
+            bOK = sal_False;
+
+        std::vector<rtl::OUString>::const_iterator pIter;
+        for ( pIter = rBookmarkList.begin(); bOK && pIter != rBookmarkList.end() && !bInsertPages; ++pIter )
+        {
+            /******************************************************************
+            * Gibt es in der Bookmark-Liste einen Seitennamen?
+            ******************************************************************/
+            String  aBMPgName(*pIter);
+            sal_Bool    bIsMasterPage;
+
+            if( pBookmarkDoc->GetPageByName( aBMPgName, bIsMasterPage ) != SDRPAGE_NOTFOUND )
+            {
+                // Seite gefunden
+                bInsertPages = sal_True;
+            }
+        }
+    }
+
+    sal_Bool bCalcObjCount = !rExchangeList.empty();
+
+    if ( bOK && bInsertPages )
+    {
+        // Zuerst werden alle Seiten-Bookmarks eingefuegt
+        bOK = InsertBookmarkAsPage(rBookmarkList, rExchangeList, bLink, bReplace,
+                                   nInsertPos, bNoDialogs, pBookmarkDocSh, bCopy, sal_True, sal_False);
+    }
+
+    if ( bOK && !rBookmarkList.empty() )
+    {
+        // Es werden alle Objekt-Bookmarks eingefuegt
+        bOK = InsertBookmarkAsObject(rBookmarkList, rExchangeList, bLink,
+                                     pBookmarkDocSh, pObjPos, bCalcObjCount);
+    }
+
+    return bOK;
+}
+
 sal_Bool SdDrawDocument::InsertBookmarkAsPage(
     List* pBookmarkList,
     List* pExchangeList,            // Liste der zu verwendenen Namen
-- 
1.7.3.4

