summaryrefslogtreecommitdiff
path: root/sd/source/core/drawdoc3.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sd/source/core/drawdoc3.cxx')
-rw-r--r--sd/source/core/drawdoc3.cxx2055
1 files changed, 0 insertions, 2055 deletions
diff --git a/sd/source/core/drawdoc3.cxx b/sd/source/core/drawdoc3.cxx
deleted file mode 100644
index 3065cdc4a..000000000
--- a/sd/source/core/drawdoc3.cxx
+++ /dev/null
@@ -1,2055 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_sd.hxx"
-
-
-#include <com/sun/star/embed/ElementModes.hpp>
-#include <com/sun/star/beans/XPropertySet.hpp>
-
-#include "comphelper/anytostring.hxx"
-#include "cppuhelper/exc_hlp.hxx"
-
-#include <utility>
-#include <algorithm>
-#include <vcl/wrkwin.hxx>
-#include <sfx2/docfile.hxx>
-#include <sot/storage.hxx>
-#include <sfx2/app.hxx>
-#include <svl/itemset.hxx>
-
-#include <unotools/ucbstreamhelper.hxx>
-#include <sfx2/fcontnr.hxx>
-#include <svx/svdopath.hxx>
-#include <svx/svditer.hxx>
-#include <svl/style.hxx>
-#include <sfx2/linkmgr.hxx>
-#include <svx/svdpagv.hxx>
-#include <svx/svdogrp.hxx>
-#include <svx/svdundo.hxx>
-#include <vcl/msgbox.hxx>
-#include <sot/storage.hxx>
-#include <sot/formats.hxx>
-
-#include <set>
-#include <boost/bind.hpp>
-
-#include "glob.hrc"
-#include "drawdoc.hxx"
-#include "sdpage.hxx"
-#include "stlpool.hxx"
-#include "sdresid.hxx"
-#include "sdiocmpt.hxx"
-#include "strmname.h"
-#include "anminfo.hxx"
-
-#include "../ui/inc/unmovss.hxx"
-#include "../ui/inc/unchss.hxx"
-#include "../ui/inc/unprlout.hxx"
-#include "../ui/inc/DrawDocShell.hxx"
-#include "../ui/inc/GraphicDocShell.hxx"
-#include "../ui/inc/ViewShell.hxx"
-#include "../ui/inc/View.hxx"
-#include "../ui/inc/cfgids.hxx"
-#include "../ui/inc/strings.hrc"
-
-using namespace ::com::sun::star;
-
-#define POOL_BUFFER_SIZE (sal_uInt16)32768
-#define BASIC_BUFFER_SIZE (sal_uInt16)8192
-#define DOCUMENT_BUFFER_SIZE (sal_uInt16)32768
-
-/*************************************************************************
-|*
-|* Oeffnet ein Bookmark-Dokument
-|*
-\************************************************************************/
-
-SdDrawDocument* SdDrawDocument::OpenBookmarkDoc(SfxMedium& rMedium)
-{
- sal_Bool bOK = sal_True;
- SdDrawDocument* pBookmarkDoc = NULL;
- String aBookmarkName = rMedium.GetName();
- const SfxFilter* pFilter = rMedium.GetFilter();
- if ( !pFilter )
- {
- rMedium.UseInteractionHandler( sal_True );
- SFX_APP()->GetFilterMatcher().GuessFilter( rMedium, &pFilter );
- }
-
- if ( !pFilter )
- {
- bOK = sal_False;
- }
- else if ( maBookmarkFile != aBookmarkName && aBookmarkName.Len() )
- {
- sal_Bool bCreateGraphicShell = pFilter->GetServiceName().EqualsAscii( "com.sun.star.drawing.DrawingDocument" );
- sal_Bool bCreateImpressShell = pFilter->GetServiceName().EqualsAscii( "com.sun.star.presentation.PresentationDocument" );
- if ( bCreateGraphicShell || bCreateImpressShell )
- {
- CloseBookmarkDoc();
-
- // Es wird eine DocShell erzeugt, da in dem Dokument OLE-Objekte
- // enthalten sein koennten (Persist)
- // Wenn dem nicht so waere, so koennte man auch das Model
- // direkt laden
- if ( bCreateGraphicShell )
- // Draw
- mxBookmarkDocShRef = new ::sd::GraphicDocShell(SFX_CREATE_MODE_STANDARD, sal_True);
- else
- // Impress
- mxBookmarkDocShRef = new ::sd::DrawDocShell(SFX_CREATE_MODE_STANDARD, sal_True);
-
- bOK = mxBookmarkDocShRef->DoLoad(&rMedium);
- if( bOK )
- {
- maBookmarkFile = aBookmarkName;
- pBookmarkDoc = mxBookmarkDocShRef->GetDoc();
- }
- }
- }
-
- DBG_ASSERT(aBookmarkName.Len(), "Empty document name!");
-
- if (!bOK)
- {
- ErrorBox aErrorBox( NULL, (WinBits)WB_OK, String(SdResId(STR_READ_DATA_ERROR)));
- aErrorBox.Execute();
-
- CloseBookmarkDoc();
- pBookmarkDoc = NULL;
- }
- else if (mxBookmarkDocShRef.Is())
- {
- pBookmarkDoc = mxBookmarkDocShRef->GetDoc();
- }
-
- return(pBookmarkDoc);
-}
-
-/*************************************************************************
-|*
-|* Oeffnet ein Bookmark-Dokument
-|*
-\************************************************************************/
-
-SdDrawDocument* SdDrawDocument::OpenBookmarkDoc(const String& rBookmarkFile)
-{
- SdDrawDocument* pBookmarkDoc = NULL;
-
- if (maBookmarkFile != rBookmarkFile && rBookmarkFile.Len())
- {
- SfxMedium* pMedium = new SfxMedium( rBookmarkFile, STREAM_READ, sal_False );
- pBookmarkDoc = OpenBookmarkDoc(*pMedium);
- }
- else if (mxBookmarkDocShRef.Is())
- {
- pBookmarkDoc = mxBookmarkDocShRef->GetDoc();
- }
-
- return(pBookmarkDoc);
-}
-
-/*************************************************************************
-|*
-|* Fuegt ein Bookmark (Seite oder Objekt) ein
-|*
-\************************************************************************/
-
-sal_Bool SdDrawDocument::InsertBookmark(
- List* pBookmarkList, // Liste der Namen der einzufuegenden Bookmarks
- List* pExchangeList, // 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 (!pBookmarkList)
- {
- /**********************************************************************
- * 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;
-
- for (sal_uInt16 nPos = 0; bOK && ( nPos < pBookmarkList->Count() ) && !bInsertPages; nPos++)
- {
- /******************************************************************
- * Gibt es in der Bookmark-Liste einen Seitennamen?
- ******************************************************************/
- String aBMPgName (*(String*) pBookmarkList->GetObject(nPos));
- sal_Bool bIsMasterPage;
-
- if( pBookmarkDoc->GetPageByName( aBMPgName, bIsMasterPage ) != SDRPAGE_NOTFOUND )
- {
- // Seite gefunden
- bInsertPages = sal_True;
- }
- }
- }
-
- if ( bOK && bInsertPages )
- {
- // Zuerst werden alle Seiten-Bookmarks eingefuegt
- bOK = InsertBookmarkAsPage(pBookmarkList, pExchangeList, bLink, bReplace,
- nInsertPos, bNoDialogs, pBookmarkDocSh, bCopy, sal_True, sal_False);
- }
-
- if ( bOK && pBookmarkList )
- {
- // Es werden alle Objekt-Bookmarks eingefuegt
- bOK = InsertBookmarkAsObject(pBookmarkList, pExchangeList, bLink,
- pBookmarkDocSh, pObjPos);
- }
-
- return bOK;
-}
-
-/*************************************************************************
-|*
-|* Fuegt ein Bookmark als Seite ein
-|*
-\************************************************************************/
-
-/** Concrete incarnations get called by IterateBookmarkPages, for
- every page in the bookmark document/list
- */
-class SdDrawDocument::InsertBookmarkAsPage_PageFunctorBase
-{
-public:
- virtual ~InsertBookmarkAsPage_PageFunctorBase() = 0;
- virtual void operator()( SdDrawDocument&, SdPage* ) = 0;
-};
-
-SdDrawDocument::InsertBookmarkAsPage_PageFunctorBase::~InsertBookmarkAsPage_PageFunctorBase()
-{
-}
-
-void SdDrawDocument::IterateBookmarkPages( SdDrawDocument* pBookmarkDoc, List* pBookmarkList, sal_uInt16 nBMSdPageCount,
- SdDrawDocument::InsertBookmarkAsPage_PageFunctorBase& rPageIterator )
-{
- //
- // Refactored copy'n'pasted layout name collection from InsertBookmarkAsPage
- //
- int nPos, nEndPos;
-
- if( !pBookmarkList )
- {
- // no list? whole source document
- nEndPos = nBMSdPageCount;
- }
- else
- {
- // bookmark list? number of entries
- nEndPos = pBookmarkList->Count();
- }
-
- SdPage* pBMPage;
-
- // iterate over number of pages to insert
- for (nPos = 0; nPos < nEndPos; ++nPos)
- {
- // the master page associated to the nPos'th page to insert
- SdPage* pBMMPage = NULL;
-
- if( !pBookmarkList )
- {
- // simply take master page of nPos'th page in source document
- pBMMPage = (SdPage*)(&(pBookmarkDoc->GetSdPage((sal_uInt16)nPos, PK_STANDARD)->TRG_GetMasterPage()));
- }
- else
- {
- // fetch nPos'th entry from bookmark list, and determine master page
- String aBMPgName (*(String*) pBookmarkList->GetObject(nPos));
- sal_Bool bIsMasterPage;
-
- sal_uInt16 nBMPage = pBookmarkDoc->GetPageByName( aBMPgName, bIsMasterPage );
-
- if (nBMPage != SDRPAGE_NOTFOUND)
- {
- pBMPage = (SdPage*) pBookmarkDoc->GetPage(nBMPage);
- }
- else
- {
- pBMPage = NULL;
- }
-
- // enforce that bookmarked page is a standard page and not already a master page
- if (pBMPage && pBMPage->GetPageKind()==PK_STANDARD && !pBMPage->IsMasterPage())
- {
- const sal_uInt16 nBMSdPage = (nBMPage - 1) / 2;
- pBMMPage = (SdPage*) (&(pBookmarkDoc->GetSdPage(nBMSdPage, PK_STANDARD)->TRG_GetMasterPage()));
- }
- }
-
- // successfully determined valid (bookmarked) page?
- if( pBMMPage )
- {
- // yes, call functor
- rPageIterator( *this, pBMMPage );
- }
- }
-}
-
-class InsertBookmarkAsPage_FindDuplicateLayouts : public SdDrawDocument::InsertBookmarkAsPage_PageFunctorBase
-{
-public:
- InsertBookmarkAsPage_FindDuplicateLayouts( List* pLayoutsToTransfer, SdDrawDocument* pBookmarkDoc,
- List* pBookmarkList, sal_uInt16 nBMSdPageCount ) :
- mpLayoutsToTransfer(pLayoutsToTransfer), mpBookmarkDoc(pBookmarkDoc),
- mpBookmarkList(pBookmarkList), mnBMSdPageCount(nBMSdPageCount) {}
- virtual ~InsertBookmarkAsPage_FindDuplicateLayouts() {};
- virtual void operator()( SdDrawDocument&, SdPage* );
-private:
- List* mpLayoutsToTransfer;
- SdDrawDocument* mpBookmarkDoc;
- List* mpBookmarkList;
- sal_uInt16 mnBMSdPageCount;
-};
-
-void InsertBookmarkAsPage_FindDuplicateLayouts::operator()( SdDrawDocument& rDoc, SdPage* pBMMPage )
-{
- // now check for duplicate masterpage and layout names
- // ===================================================
-
- String sFullLayoutName( pBMMPage->GetLayoutName() );
- String* pLayout = new String(sFullLayoutName);
- pLayout->Erase( pLayout->SearchAscii( SD_LT_SEPARATOR ));
-
- String* pTest = (String*) mpLayoutsToTransfer->First();
- sal_Bool bFound = sal_False;
-
- while (pTest && !bFound) // found yet?
- {
- if (*pLayout == *pTest)
- bFound = sal_True;
- else
- pTest = (String*)mpLayoutsToTransfer->Next();
- }
-
- const sal_uInt16 nMPageCount = rDoc.GetMasterPageCount();
- for (sal_uInt16 nMPage = 0; nMPage < nMPageCount && !bFound; nMPage++)
- {
- /**************************************************************
- * Gibt es die Layouts schon im Dokument?
- **************************************************************/
- SdPage* pTestPage = (SdPage*) rDoc.GetMasterPage(nMPage);
- String aTest(pTestPage->GetLayoutName());
- aTest.Erase( aTest.SearchAscii( SD_LT_SEPARATOR ));
-
- if (aTest == *pLayout)
- bFound = sal_True;
- }
-
- if (!bFound)
- mpLayoutsToTransfer->Insert(pLayout, LIST_APPEND);
- else
- delete pLayout;
-}
-
-/** Just add one page to the container given to the constructor.
-*/
-class InsertBookmarkAsPage_AddBookmarkedPages
- : public SdDrawDocument::InsertBookmarkAsPage_PageFunctorBase
-{
-public:
- InsertBookmarkAsPage_AddBookmarkedPages(::std::vector<SdPage*>& rContainer)
- : mrContainer(rContainer) {}
- ~InsertBookmarkAsPage_AddBookmarkedPages(void) {}
- void operator() (SdDrawDocument&, SdPage* pPage) { mrContainer.push_back(pPage); }
-private:
- ::std::vector<SdPage*>& mrContainer;
-};
-
-
-sal_Bool SdDrawDocument::InsertBookmarkAsPage(
- List* pBookmarkList,
- List* pExchangeList, // Liste der zu verwendenen Namen
- sal_Bool bLink,
- sal_Bool bReplace,
- sal_uInt16 nInsertPos,
- sal_Bool bNoDialogs,
- ::sd::DrawDocShell* pBookmarkDocSh,
- sal_Bool bCopy,
- sal_Bool bMergeMasterPages,
- sal_Bool bPreservePageNames)
-{
- sal_Bool bOK = sal_True;
- sal_Bool bContinue = sal_True;
- sal_Bool bScaleObjects = sal_False;
- sal_uInt16 nReplacedStandardPages = 0;
-
- SdDrawDocument* pBookmarkDoc = NULL;
- String aBookmarkName;
-
- if (pBookmarkDocSh)
- {
- pBookmarkDoc = pBookmarkDocSh->GetDoc();
-
- if (pBookmarkDocSh->GetMedium())
- {
- aBookmarkName = pBookmarkDocSh->GetMedium()->GetName();
- }
- }
- else if ( mxBookmarkDocShRef.Is() )
- {
- pBookmarkDoc = mxBookmarkDocShRef->GetDoc();
- aBookmarkName = maBookmarkFile;
- }
- else
- {
- return sal_False;
- }
-
- const sal_uInt16 nSdPageCount = GetSdPageCount(PK_STANDARD);
- const sal_uInt16 nBMSdPageCount = pBookmarkDoc->GetSdPageCount(PK_STANDARD);
- const sal_uInt16 nMPageCount = GetMasterPageCount();
-
- if (nSdPageCount==0 || nBMSdPageCount==0 || nMPageCount==0)
- {
- bContinue = bOK = sal_False;
- return(bContinue);
- }
-
- // Store the size and some other properties of the first page and notes
- // page so that inserted pages can be properly scaled even when inserted
- // before the first page.
- // Note that the pointers are used later on as general page pointers.
- SdPage* pRefPage = GetSdPage(0, PK_STANDARD);
- Size aSize(pRefPage->GetSize());
- sal_Int32 nLeft = pRefPage->GetLftBorder();
- sal_Int32 nRight = pRefPage->GetRgtBorder();
- sal_Int32 nUpper = pRefPage->GetUppBorder();
- sal_Int32 nLower = pRefPage->GetLwrBorder();
- Orientation eOrient = pRefPage->GetOrientation();
-
- SdPage* pNPage = GetSdPage(0, PK_NOTES);
- Size aNSize(GetSdPage(0, PK_NOTES)->GetSize());
- sal_Int32 nNLeft = pNPage->GetLftBorder();
- sal_Int32 nNRight = pNPage->GetRgtBorder();
- sal_Int32 nNUpper = pNPage->GetUppBorder();
- sal_Int32 nNLower = pNPage->GetLwrBorder();
- Orientation eNOrient = pRefPage->GetOrientation();
-
- // Seitengroesse und -raender an die Werte der letzten
- // Seiten anpassen?
- pRefPage = GetSdPage(nSdPageCount - 1, PK_STANDARD);
-
- if( bNoDialogs )
- {
- if( !pBookmarkList )
- bScaleObjects = pRefPage->IsScaleObjects();
- else
- bScaleObjects = sal_True;
- }
- else
- {
- SdPage* pBMPage = pBookmarkDoc->GetSdPage(0,PK_STANDARD);
-
- if (pBMPage->GetSize() != pRefPage->GetSize() ||
- pBMPage->GetLftBorder() != pRefPage->GetLftBorder() ||
- pBMPage->GetRgtBorder() != pRefPage->GetRgtBorder() ||
- pBMPage->GetUppBorder() != pRefPage->GetUppBorder() ||
- pBMPage->GetLwrBorder() != pRefPage->GetLwrBorder())
- {
- String aStr(SdResId(STR_SCALE_OBJECTS));
- sal_uInt16 nBut = QueryBox( NULL, WB_YES_NO_CANCEL, aStr).Execute();
-
- bScaleObjects = nBut == RET_YES;
- bContinue = nBut != RET_CANCEL;
-
- if (!bContinue)
- {
- return(bContinue);
- }
- }
- }
-
-
- /**************************************************************************
- |* Die benoetigten Praesentations-StyleSheets ermitteln und vor
- |* den Seiten transferieren, sonst verlieren die Textobjekte
- |* beim Transfer den Bezug zur Vorlage
- \*************************************************************************/
- ::svl::IUndoManager* pUndoMgr = NULL;
- if( mpDocSh )
- {
- pUndoMgr = mpDocSh->GetUndoManager();
- pUndoMgr->EnterListAction(String(SdResId(STR_UNDO_INSERTPAGES)), String());
- }
-
- List* pLayoutsToTransfer = new List;
-
- //
- // Refactored copy'n'pasted layout name collection into IterateBookmarkPages
- //
- InsertBookmarkAsPage_FindDuplicateLayouts aSearchFunctor( pLayoutsToTransfer, pBookmarkDoc,
- pBookmarkList, nBMSdPageCount );
- IterateBookmarkPages( pBookmarkDoc, pBookmarkList, nBMSdPageCount, aSearchFunctor );
-
-
- /**************************************************************************
- * Die tatsaechlich benoetigten Vorlagen kopieren
- **************************************************************************/
- SdStyleSheetPool* pBookmarkStyleSheetPool =
- (SdStyleSheetPool*) pBookmarkDoc->GetStyleSheetPool();
- String* pLayout = (String*) pLayoutsToTransfer->First();
-
- // Wenn Vorlagen kopiert werden muessen, dann muessen auch die
- // MasterPages kopiert werden!
- if( pLayout )
- bMergeMasterPages = sal_True;
-
- while (pLayout)
- {
- SdStyleSheetVector aCreatedStyles;
-
- ((SdStyleSheetPool*)GetStyleSheetPool())->CopyLayoutSheets(*pLayout, *pBookmarkStyleSheetPool,aCreatedStyles);
-
- if(!aCreatedStyles.empty())
- {
- if( pUndoMgr )
- {
- SdMoveStyleSheetsUndoAction* pMovStyles = new SdMoveStyleSheetsUndoAction(this, aCreatedStyles, sal_True);
- pUndoMgr->AddUndoAction(pMovStyles);
- }
- }
-
- delete pLayout;
-
- pLayout = (String*)pLayoutsToTransfer->Next();
- }
-
- delete pLayoutsToTransfer;
-
- /**************************************************************************
- * Dokument einfuegen
- **************************************************************************/
-
- const bool bUndo = IsUndoEnabled();
-
- if( bUndo )
- BegUndo(String(SdResId(STR_UNDO_INSERTPAGES)));
-
- if (!pBookmarkList)
- {
- if (nInsertPos >= GetPageCount())
- {
- // Seiten werden hinten angefuegt
- nInsertPos = GetPageCount();
- }
-
- sal_uInt16 nActualInsertPos = nInsertPos;
-
- List aNameList;
- std::set<sal_uInt16> aRenameSet;
- sal_uInt16 nBMSdPage;
-
- for (nBMSdPage=0; nBMSdPage < nBMSdPageCount; nBMSdPage++)
- {
- SdPage* pBMPage = pBookmarkDoc->GetSdPage(nBMSdPage, PK_STANDARD);
- String pName( pBMPage->GetName() );
- sal_Bool bIsMasterPage;
-
- if (bLink)
- {
- // Es werden sich die Namen aller Seiten gemerkt
- aNameList.Insert(new String(pName), nBMSdPage);
- }
-
- // Have to check for duplicate names here, too
- // don't change name if source and dest model are the same!
- if( pBookmarkDoc != this &&
- GetPageByName(pName, bIsMasterPage ) != SDRPAGE_NOTFOUND )
- {
- // delay renaming *after* pages are copied (might destroy source otherwise)
- aRenameSet.insert(nBMSdPage);
- }
- }
-
- Merge(*pBookmarkDoc,
- 1, // Nicht die Handzettelseite
- 0xFFFF, // Aber alle anderen
- nActualInsertPos, // An Position einfuegen
- bMergeMasterPages, // MasterPages mitnehmen
- sal_False, // Aber nur die benoetigten MasterPages
- sal_True, // Undo-Aktion erzeugen
- bCopy); // Seiten kopieren (oder mergen)
-
- for (nBMSdPage=0; nBMSdPage < nBMSdPageCount; nBMSdPage++)
- {
- SdPage* pPage = (SdPage*) GetPage(nActualInsertPos);
- SdPage* pNotesPage = (SdPage*) GetPage(nActualInsertPos+1);
- String* pName = (String*) aNameList.GetObject(nBMSdPage);
-
- // delay renaming *after* pages are copied (might destroy source otherwise)
- if( aRenameSet.find(nBMSdPage) != aRenameSet.end() )
- {
- // Seitenname schon vorhanden -> Defaultname
- // fuer Standard & Notizseite
- pPage->SetName(String());
- pNotesPage->SetName(String());
- }
-
- if (bLink)
- {
- // Nun werden die Link-Namen zusammengestellt
- pPage->SetFileName(aBookmarkName);
- pPage->SetBookmarkName(*(pName));
- delete pName;
- pPage->SetModel(this);
- }
-
- nActualInsertPos += 2;
- }
- }
- else
- {
- /**********************************************************************
- * Ausgewaehlte Seiten einfuegen
- **********************************************************************/
- SdPage* pBMPage;
-
- if (nInsertPos >= GetPageCount())
- {
- // Seiten werden hinten angefuegt
- bReplace = sal_False;
- nInsertPos = GetPageCount();
- }
-
- sal_uInt16 nActualInsertPos = nInsertPos;
-
- // Collect the bookmarked pages.
- ::std::vector<SdPage*> aBookmarkedPages (pBookmarkList->Count(), NULL);
- for (sal_uInt16 nPos = 0; nPos < pBookmarkList->Count(); nPos++)
- {
- String aPgName(*(String*) pBookmarkList->GetObject(nPos));
- sal_Bool bIsMasterPage;
- sal_uInt16 nBMPage = pBookmarkDoc->GetPageByName( aPgName, bIsMasterPage );
-
- if (nBMPage != SDRPAGE_NOTFOUND)
- {
- aBookmarkedPages[nPos] = dynamic_cast<SdPage*>(pBookmarkDoc->GetPage(nBMPage));
- }
- }
-
- for (sal_uInt16 nPos = 0; nPos < pBookmarkList->Count(); nPos++)
- {
- pBMPage = aBookmarkedPages[nPos];
- sal_uInt16 nBMPage = pBMPage!=NULL ? pBMPage->GetPageNum() : SDRPAGE_NOTFOUND;
-
- if (pBMPage && pBMPage->GetPageKind()==PK_STANDARD && !pBMPage->IsMasterPage())
- {
- /**************************************************************
- * Es muss eine StandardSeite sein
- **************************************************************/
- sal_Bool bMustRename = sal_False;
-
- // delay renaming *after* pages are copied (might destroy source otherwise)
- // don't change name if source and dest model are the same!
- // avoid renaming if replacing the same page
- String aPgName(*(String*) pBookmarkList->GetObject(nPos));
- sal_Bool bIsMasterPage;
- sal_uInt16 nPageSameName = GetPageByName(aPgName, bIsMasterPage);
- if( pBookmarkDoc != this &&
- nPageSameName != SDRPAGE_NOTFOUND &&
- ( !bReplace ||
- nPageSameName != nActualInsertPos ) )
- {
- bMustRename = sal_True;
- }
-
- SdPage* pBookmarkPage = pBMPage;
- if (bReplace )
- {
- ReplacePageInCustomShows( dynamic_cast< SdPage* >( GetPage( nActualInsertPos ) ), pBookmarkPage );
- }
-
- Merge(*pBookmarkDoc,
- nBMPage, // Von Seite (Standard)
- nBMPage+1, // Bis Seite (Notizen)
- nActualInsertPos, // An Position einfuegen
- bMergeMasterPages, // MasterPages mitnehmen
- sal_False, // Aber nur die benoetigten MasterPages
- sal_True, // Undo-Aktion erzeugen
- bCopy); // Seiten kopieren (oder mergen)
-
- if( bReplace )
- {
- if( GetPage( nActualInsertPos ) != pBookmarkPage )
- {
- // bookmark page was not moved but cloned, so update custom shows again
- ReplacePageInCustomShows( pBookmarkPage, dynamic_cast< SdPage* >( GetPage( nActualInsertPos ) ) );
- }
- }
-
- if( bMustRename )
- {
- // Seitenname schon vorhanden -> Defaultname
- // fuer Standard & Notizseite
- SdPage* pPage = (SdPage*) GetPage(nActualInsertPos);
- pPage->SetName(String());
- SdPage* pNotesPage = (SdPage*) GetPage(nActualInsertPos+1);
- pNotesPage->SetName(String());
- }
-
- if (bLink)
- {
- SdPage* pPage = (SdPage*) GetPage(nActualInsertPos);
- pPage->SetFileName(aBookmarkName);
- pPage->SetBookmarkName(aPgName);
- pPage->SetModel(this);
- }
-
- if (bReplace)
- {
- // Seite & Notizseite ausfuegen
- const sal_uInt16 nDestPageNum(nActualInsertPos + 2);
- SdPage* pStandardPage = 0L;
-
- if(nDestPageNum < GetPageCount())
- {
- pStandardPage = (SdPage*)GetPage(nDestPageNum);
- }
-
- if (pStandardPage)
- {
- if( bPreservePageNames )
- {
- // Take old slide names for inserted pages
- SdPage* pPage = (SdPage*) GetPage(nActualInsertPos);
- pPage->SetName( pStandardPage->GetRealName() );
- }
-
- if( bUndo )
- AddUndo(GetSdrUndoFactory().CreateUndoDeletePage(*pStandardPage));
-
- RemovePage(nDestPageNum);
-
- if( !bUndo )
- delete pStandardPage;
- }
-
- SdPage* pNotesPage = 0L;
-
- if(nDestPageNum < GetPageCount())
- {
- pNotesPage = (SdPage*)GetPage(nDestPageNum);
- }
-
- if (pNotesPage)
- {
- if( bPreservePageNames )
- {
- // Take old slide names for inserted pages
- SdPage* pNewNotesPage = (SdPage*) GetPage(nActualInsertPos+1);
- if( pNewNotesPage )
- pNewNotesPage->SetName( pStandardPage->GetRealName() );
- }
-
- if( bUndo )
- AddUndo(GetSdrUndoFactory().CreateUndoDeletePage(*pNotesPage));
-
- RemovePage(nDestPageNum);
-
- if( !bUndo )
- delete pNotesPage;
- }
-
- nReplacedStandardPages++;
- }
-
- nActualInsertPos += 2;
- }
- }
- }
-
-
- /**************************************************************************
- |* Dabei sind evtl. zu viele Masterpages ruebergekommen, da die
- |* DrawingEngine gleiche Praesentationslayouts nicht erkennen kann.
- |* Ueberzaehlige MasterPages entfernen.
- \*************************************************************************/
- sal_uInt16 nNewMPageCount = GetMasterPageCount();
-
- // rueckwaerts, damit Nummern nicht durcheinander geraten
- for (sal_uInt16 nPage = nNewMPageCount - 1; nPage >= nMPageCount; nPage--)
- {
- pRefPage = (SdPage*) GetMasterPage(nPage);
- String aMPLayout(pRefPage->GetLayoutName());
- PageKind eKind = pRefPage->GetPageKind();
-
- // gibt's den schon?
- for (sal_uInt16 nTest = 0; nTest < nMPageCount; nTest++)
- {
- SdPage* pTest = (SdPage*) GetMasterPage(nTest);
- String aTest(pTest->GetLayoutName());
-
- // nInsertPos > 2 is always true when inserting into non-empty models
- if ( nInsertPos > 2 &&
- aTest == aMPLayout &&
- eKind == pTest->GetPageKind() )
- {
- if( bUndo )
- AddUndo(GetSdrUndoFactory().CreateUndoDeletePage(*pRefPage));
-
- RemoveMasterPage(nPage);
-
- if( !bUndo )
- delete pRefPage;
- nNewMPageCount--;
- break;
- }
- }
- }
-
- // nInsertPos > 2 is always true when inserting into non-empty models
- if (nInsertPos > 0)
- {
- sal_uInt16 nSdPageStart = (nInsertPos - 1) / 2;
- sal_uInt16 nSdPageEnd = GetSdPageCount(PK_STANDARD) - nSdPageCount +
- nSdPageStart - 1;
- const bool bRemoveEmptyPresObj = pBookmarkDoc &&
- (pBookmarkDoc->GetDocumentType() == DOCUMENT_TYPE_IMPRESS) &&
- (GetDocumentType() == DOCUMENT_TYPE_DRAW);
-
- if( bReplace )
- {
- nSdPageEnd = nSdPageStart + nReplacedStandardPages - 1;
- }
-
- for (sal_uInt16 nSdPage = nSdPageStart; nSdPage <= nSdPageEnd; nSdPage++)
- {
- pRefPage = GetSdPage(nSdPage, PK_STANDARD);
-
- if (pExchangeList)
- {
- // Zuverwendener Name aus Exchange-Liste holen
- if (pExchangeList->GetCurObject())
- {
- String aExchangeName (*(String*) pExchangeList->GetCurObject());
- pRefPage->SetName(aExchangeName);
- SdrHint aHint(HINT_PAGEORDERCHG);
- aHint.SetPage(pRefPage);
- Broadcast(aHint);
- SdPage* pNewNotesPage = GetSdPage(nSdPage, PK_NOTES);
- pNewNotesPage->SetName(aExchangeName);
- aHint.SetPage(pNewNotesPage);
- Broadcast(aHint);
- }
-
- pExchangeList->Next();
- }
-
- String aLayout(pRefPage->GetLayoutName());
- aLayout.Erase(aLayout.SearchAscii( SD_LT_SEPARATOR ));
-
- // update layout and referred master page
- pRefPage->SetPresentationLayout(aLayout);
- if( bUndo )
- AddUndo( GetSdrUndoFactory().CreateUndoPageChangeMasterPage( *pRefPage ) );
-
- if (bScaleObjects)
- {
- Rectangle aBorderRect(nLeft, nUpper, nRight, nLower);
- pRefPage->ScaleObjects(aSize, aBorderRect, sal_True);
- }
- pRefPage->SetSize(aSize);
- pRefPage->SetBorder(nLeft, nUpper, nRight, nLower);
- pRefPage->SetOrientation( eOrient );
-
- if( bRemoveEmptyPresObj )
- pRefPage->RemoveEmptyPresentationObjects();
-
- pRefPage = GetSdPage(nSdPage, PK_NOTES);
-
- // update layout and referred master page
- pRefPage->SetPresentationLayout(aLayout);
- if( bUndo )
- AddUndo( GetSdrUndoFactory().CreateUndoPageChangeMasterPage( *pRefPage ) );
-
- if (bScaleObjects)
- {
- Rectangle aBorderRect(nNLeft, nNUpper, nNRight, nNLower);
- pRefPage->ScaleObjects(aNSize, aBorderRect, sal_True);
- }
-
- pRefPage->SetSize(aNSize);
- pRefPage->SetBorder(nNLeft, nNUpper, nNRight, nNLower);
- pRefPage->SetOrientation( eNOrient );
-
- if( bRemoveEmptyPresObj )
- pRefPage->RemoveEmptyPresentationObjects();
- }
-
- for (sal_uInt16 nPage = nMPageCount; nPage < nNewMPageCount; nPage++)
- {
- pRefPage = (SdPage*) GetMasterPage(nPage);
- if (pRefPage->GetPageKind() == PK_STANDARD)
- {
- if (bScaleObjects)
- {
- Rectangle aBorderRect(nLeft, nUpper, nRight, nLower);
- pRefPage->ScaleObjects(aSize, aBorderRect, sal_True);
- }
- pRefPage->SetSize(aSize);
- pRefPage->SetBorder(nLeft, nUpper, nRight, nLower);
- pRefPage->SetOrientation( eOrient );
- }
- else // kann nur noch NOTES sein
- {
- if (bScaleObjects)
- {
- Rectangle aBorderRect(nNLeft, nNUpper, nNRight, nNLower);
- pRefPage->ScaleObjects(aNSize, aBorderRect, sal_True);
- }
- pRefPage->SetSize(aNSize);
- pRefPage->SetBorder(nNLeft, nNUpper, nNRight, nNLower);
- pRefPage->SetOrientation( eNOrient );
- }
-
- if( bRemoveEmptyPresObj )
- pRefPage->RemoveEmptyPresentationObjects();
- }
- }
-
- // Make absolutely sure no double masterpages are there
- RemoveUnnecessaryMasterPages(NULL, sal_True, sal_True);
-
- if( bUndo )
- EndUndo();
- pUndoMgr->LeaveListAction();
-
- return bContinue;
-}
-
-/*************************************************************************
-|*
-|* Fuegt ein Bookmark als Objekt ein
-|*
-\************************************************************************/
-
-sal_Bool SdDrawDocument::InsertBookmarkAsObject(
- List* pBookmarkList,
- List* pExchangeList, // Liste der zu verwendenen Namen
- sal_Bool /* bLink */,
- ::sd::DrawDocShell* pBookmarkDocSh,
- Point* pObjPos)
-{
- sal_Bool bOK = sal_True;
- sal_Bool bOLEObjFound = sal_False;
- ::sd::View* pBMView = NULL;
-
- SdDrawDocument* pBookmarkDoc = NULL;
- String aBookmarkName;
-
- if (pBookmarkDocSh)
- {
- pBookmarkDoc = pBookmarkDocSh->GetDoc();
-
- if (pBookmarkDocSh->GetMedium())
- {
- aBookmarkName = pBookmarkDocSh->GetMedium()->GetName();
- }
- }
- else if ( mxBookmarkDocShRef.Is() )
- {
- pBookmarkDoc = mxBookmarkDocShRef->GetDoc();
- aBookmarkName = maBookmarkFile;
- }
- else
- {
- return sal_False;
- }
-
- if (!pBookmarkList)
- {
- pBMView = new ::sd::View(pBookmarkDoc, (OutputDevice*) NULL);
- pBMView->EndListening(*pBookmarkDoc);
- pBMView->MarkAll();
- }
- else
- {
- SdrPage* pPage;
- SdrPageView* pPV;
-
- for (sal_uInt16 nPos = 0; nPos < pBookmarkList->Count(); nPos++)
- {
- /******************************************************************
- * Namen der Bookmarks aus Liste holen
- ******************************************************************/
- String aBMName (*(String*) pBookmarkList->GetObject(nPos));
-
- SdrObject* pObj = pBookmarkDoc->GetObj(aBMName);
-
- if (pObj)
- {
- // Objekt gefunden
-
- if (pObj->GetObjInventor() == SdrInventor &&
- pObj->GetObjIdentifier() == OBJ_OLE2)
- {
- bOLEObjFound = sal_True;
- }
-
- if (!pBMView)
- {
- // View erstmalig erzeugen
- pBMView = new ::sd::View(pBookmarkDoc, (OutputDevice*) NULL);
- pBMView->EndListening(*pBookmarkDoc);
- }
-
- pPage = pObj->GetPage();
-
- if (pPage->IsMasterPage())
- {
- pPV = pBMView->ShowSdrPage(pBMView->GetModel()->GetMasterPage(pPage->GetPageNum()));
- }
- else
- {
- pPV = pBMView->GetSdrPageView();
- if( !pPV || (pPV->GetPage() != pPage))
- pPV = pBMView->ShowSdrPage(pPage);
- }
-
- pBMView->MarkObj(pObj, pPV, sal_False);
- }
- }
- }
-
- if (pBMView)
- {
- /**********************************************************************
- * Selektierte Objekte einfuegen
- **********************************************************************/
- ::sd::View* pView = new ::sd::View(this, (OutputDevice*) NULL);
- pView->EndListening(*this);
-
- // Seite bestimmen, auf der die Objekte eingefuegt werden sollen
- SdrPage* pPage = GetSdPage(0, PK_STANDARD);
-
- if (mpDocSh)
- {
- ::sd::ViewShell* pViewSh = mpDocSh->GetViewShell();
-
- if (pViewSh)
- {
- // Welche Seite wird denn aktuell angezeigt?
- SdrPageView* pPV = pViewSh->GetView()->GetSdrPageView();
-
- if (pPV)
- {
- pPage = pPV->GetPage();
- }
- else if (pViewSh->GetActualPage())
- {
- pPage = pViewSh->GetActualPage();
- }
- }
- }
-
- Point aObjPos;
-
- if (pObjPos)
- {
- aObjPos = *pObjPos;
- }
- else
- {
- aObjPos = Rectangle(Point(), pPage->GetSize()).Center();
- }
-
- sal_uLong nCountBefore = 0;
-
- if (pExchangeList)
- {
- // OrdNums sortieren und Anzahl Objekte vor dem Einfuegen bestimmen
- pPage->RecalcObjOrdNums();
- nCountBefore = pPage->GetObjCount();
- }
-
- if (bOLEObjFound)
- pBMView->GetDoc()->SetAllocDocSh(sal_True);
-
- SdDrawDocument* pTmpDoc = (SdDrawDocument*) pBMView->GetAllMarkedModel();
- bOK = pView->Paste(*pTmpDoc, aObjPos, pPage);
-
- if (bOLEObjFound)
- pBMView->GetDoc()->SetAllocDocSh(sal_False);
-
- if (!bOLEObjFound)
- delete pTmpDoc; // Wird ansonsten von der DocShell zerstoert
-
- delete pView;
-
- if (pExchangeList)
- {
- // Anzahl Objekte nach dem Einfuegen bestimmen
- sal_uLong nCount = pPage->GetObjCount();
-
- for (sal_uLong nObj = nCountBefore; nObj < nCount; nObj++)
- {
- // Zuverwendener Name aus Exchange-Liste holen
- if (pExchangeList->GetCurObject())
- {
- String aExchangeName (*(String*) pExchangeList->GetCurObject());
-
- if (pPage->GetObj(nObj))
- {
- pPage->GetObj(nObj)->SetName(aExchangeName);
- }
- }
-
- pExchangeList->Next();
- }
- }
- }
-
- delete pBMView;
-
- return bOK;
-}
-
-/*************************************************************************
-|*
-|* Beendet das Einfuegen von Bookmarks
-|*
-\************************************************************************/
-
-void SdDrawDocument::CloseBookmarkDoc()
-{
- if (mxBookmarkDocShRef.Is())
- {
- mxBookmarkDocShRef->DoClose();
- }
-
- mxBookmarkDocShRef.Clear();
- maBookmarkFile = String();
-}
-
-/*************************************************************************
-|*
-|* Dokument laden (fuer gelinkte Objekte)
-|*
-\************************************************************************/
-
-const SdrModel* SdDrawDocument::LoadModel(const String& rFileName)
-{
- return ( OpenBookmarkDoc(rFileName) );
-}
-
-/*************************************************************************
-|*
-|* Dokument schliessen (fuer gelinkte Objekte)
-|*
-\************************************************************************/
-
-void SdDrawDocument::DisposeLoadedModels()
-{
- CloseBookmarkDoc();
-}
-
-/*************************************************************************
-|*
-|* Ist das Dokument read-only?
-|*
-\************************************************************************/
-
-bool SdDrawDocument::IsReadOnly() const
-{
- return sal_False;
-}
-
-
-/*************************************************************************
-|*
-|* In anschliessendem AllocModel() wird eine DocShell erzeugt
-|* (xAllocedDocShRef). Eine bereits bestehende DocShell wird ggf. geloescht
-|*
-\************************************************************************/
-
-void SdDrawDocument::SetAllocDocSh(sal_Bool bAlloc)
-{
- mbAllocDocSh = bAlloc;
-
- if(mxAllocedDocShRef.Is())
- {
- mxAllocedDocShRef->DoClose();
- }
-
- mxAllocedDocShRef.Clear();
-}
-
-/*************************************************************************
-|*
-|* Liste der CustomShows zurueckgeben (ggf. zuerst erzeugen)
-|*
-\************************************************************************/
-
-List* SdDrawDocument::GetCustomShowList(sal_Bool bCreate)
-{
- if (!mpCustomShowList && bCreate)
- {
- // Liste erzeugen
- mpCustomShowList = new List();
- }
-
- return(mpCustomShowList);
-}
-
-/*************************************************************************
-|*
-|* Document-Stream herausgeben (fuer load-on-demand Graphiken)
-|*
-\************************************************************************/
-
-SvStream* SdDrawDocument::GetDocumentStream(SdrDocumentStreamInfo& rStreamInfo) const
-{
- uno::Reference < embed::XStorage > xStor;
- if (mpDocSh)
- xStor = mpDocSh->GetStorage();
- SvStream* pRet = NULL;
-
- if( xStor.is() )
- {
- //TODO/MBA: binary format removed, needs testing
- if( rStreamInfo.maUserData.Len() &&
- ( rStreamInfo.maUserData.GetToken( 0, ':' ) ==
- String( RTL_CONSTASCII_USTRINGPARAM( "vnd.sun.star.Package" ) ) ) )
- {
- const String aPicturePath( rStreamInfo.maUserData.GetToken( 1, ':' ) );
-
- // graphic from picture stream in picture storage in XML package
- if( aPicturePath.GetTokenCount( '/' ) == 2 ) try
- {
- const String aPictureStreamName( aPicturePath.GetToken( 1, '/' ) );
- const String aPictureStorageName( aPicturePath.GetToken( 0, '/' ) );
- if( xStor->isStorageElement( aPictureStorageName ) )
- {
- uno::Reference < embed::XStorage > xPictureStorage =
- xStor->openStorageElement( aPictureStorageName, embed::ElementModes::READ );
- try
- {
- if( xPictureStorage.is() && xPictureStorage->isStreamElement( aPictureStreamName ) )
- {
- uno::Reference < io::XStream > xStream = xPictureStorage->openStreamElement( aPictureStreamName, embed::ElementModes::READ );
- if( xStream.is() )
- pRet = ::utl::UcbStreamHelper::CreateStream( xStream );
- }
- }
- catch( container::NoSuchElementException& )
- {
- }
- }
- }
- catch( uno::Exception& e )
- {
- (void)e;
- OSL_FAIL(
- (rtl::OString("sd::SdDrawDocument::GetDocumentStream(), "
- "exception caught: ") +
- rtl::OUStringToOString(
- comphelper::anyToString( cppu::getCaughtException() ),
- RTL_TEXTENCODING_UTF8 ) +
- rtl::OString("\r\nATTENTION: Graphics may get lost now, please inform CL or KA!") ).getStr() );
- }
-
- rStreamInfo.mbDeleteAfterUse = ( pRet != NULL );
- }
- }
-
-#if OSL_DEBUG_LEVEL > 1
- if( pRet )
- {
- // try to get some information from stream
- const sal_uLong nStartPos = pRet->Tell();
- const sal_uLong nEndPos = pRet->Seek( STREAM_SEEK_TO_END );
- const sal_uLong nStmLen = nEndPos - nStartPos;
- sal_uChar aTestByte;
-
- // try to read one byte
- if( nStmLen )
- *pRet >> aTestByte;
-
- pRet->Seek( nStartPos );
- }
-#endif
-
- return pRet;
-}
-
-
-/*************************************************************************
-|*
-|* Nicht benutzte MasterPages und Layouts entfernen
-|*
-\************************************************************************/
-
-void SdDrawDocument::RemoveUnnecessaryMasterPages(SdPage* pMasterPage, sal_Bool bOnlyDuplicatePages, sal_Bool bUndo)
-{
- ::sd::View* pView = NULL;
- ::svl::IUndoManager* pUndoMgr = NULL;
-
- if( bUndo && !IsUndoEnabled() )
- bUndo = sal_False;
-
- if (mpDocSh)
- {
- pUndoMgr = mpDocSh->GetUndoManager();
-
- if (mpDocSh->GetViewShell())
- pView = mpDocSh->GetViewShell()->GetView();
- }
-
- /***********************************************************
- * Alle MasterPages pruefen
- ***********************************************************/
- sal_uInt16 nSdMasterPageCount = GetMasterSdPageCount( PK_STANDARD );
- for (sal_Int32 nMPage = nSdMasterPageCount - 1; nMPage >= 0; nMPage--)
- {
- SdPage* pMaster = pMasterPage;
- SdPage* pNotesMaster = NULL;
-
- if (!pMaster)
- {
- pMaster = (SdPage*) GetMasterSdPage( (sal_uInt16) nMPage, PK_STANDARD );
- pNotesMaster = (SdPage*) GetMasterSdPage( (sal_uInt16) nMPage, PK_NOTES );
- }
- else
- {
- for ( sal_uInt16 nMPg = 0; nMPg < GetMasterPageCount(); nMPg++ )
- {
- if ( pMaster == GetMasterPage( nMPg ) )
- {
- pNotesMaster = (SdPage*) GetMasterPage( ++nMPg );
- break;
- }
- }
- }
-
- DBG_ASSERT( pMaster->GetPageKind() == PK_STANDARD, "wrong page kind" );
-
- if ( pMaster->GetPageKind() == PK_STANDARD &&
- GetMasterPageUserCount( pMaster ) == 0 &&
- pNotesMaster )
- {
- // Do not delete master pages that have their precious flag set.
- sal_Bool bDeleteMaster = !pMaster->IsPrecious();
- String aLayoutName = pMaster->GetLayoutName();
-
- if(bOnlyDuplicatePages )
- {
- // remove only duplicate pages
- bDeleteMaster = sal_False;
- for (sal_uInt16 i = 0; i < GetMasterSdPageCount( PK_STANDARD ); i++)
- {
- SdPage* pMPg = (SdPage*) GetMasterSdPage( i, PK_STANDARD );
- if( pMPg != pMaster &&
- pMPg->GetLayoutName() == aLayoutName )
- {
- // duplicate page found -> remove it
- bDeleteMaster = sal_True;
- }
- }
- }
-
- if( bDeleteMaster )
- {
- if (pView)
- {
- // if MasterPage is visible hide on pageview
- SdrPageView* pPgView = pView->GetSdrPageView();
- if (pPgView)
- {
- SdrPage* pShownPage = pPgView->GetPage();
- if( (pShownPage == pMaster) || (pShownPage == pNotesMaster) )
- {
- pView->HideSdrPage();
- pView->ShowSdrPage( GetSdPage( 0, PK_STANDARD ) );
- }
- }
- }
-
- if( bUndo )
- {
- BegUndo();
- AddUndo( GetSdrUndoFactory().CreateUndoDeletePage( *pNotesMaster ) );
- }
-
- RemoveMasterPage( pNotesMaster->GetPageNum() );
-
- if( !bUndo )
- delete pNotesMaster;
-
- if( bUndo )
- AddUndo(GetSdrUndoFactory().CreateUndoDeletePage(*pMaster));
-
- RemoveMasterPage( pMaster->GetPageNum() );
-
- if( !bUndo )
- delete pMaster;
-
- if( bUndo )
- EndUndo(); // schon hier, damit sich Joes Actions ZWISCHEN unsere eigenen schieben
-
- // alte Layoutvorlagen loeschen, wenn sie nicht mehr benoetigt werden
- sal_Bool bDeleteOldStyleSheets = sal_True;
- for ( sal_uInt16 nMPg = 0;
- nMPg < GetMasterPageCount() && bDeleteOldStyleSheets;
- nMPg++ )
- {
- SdPage* pMPg = (SdPage*) GetMasterPage(nMPg);
- if (pMPg->GetLayoutName() == aLayoutName)
- {
- bDeleteOldStyleSheets = sal_False;
- }
- }
-
- if (bDeleteOldStyleSheets)
- {
- SdStyleSheetVector aRemove;
- static_cast<SdStyleSheetPool*>( mxStyleSheetPool.get())->CreateLayoutSheetList( aLayoutName, aRemove );
-
- if( bUndo )
- {
- // die Liste gehoert der UndoAction
- SdMoveStyleSheetsUndoAction* pMovStyles = new SdMoveStyleSheetsUndoAction( this, aRemove, false );
-
- if (pUndoMgr)
- pUndoMgr->AddUndoAction(pMovStyles);
- }
-
- for( SdStyleSheetVector::iterator iter = aRemove.begin(); iter != aRemove.end(); ++iter )
- static_cast<SdStyleSheetPool*>( mxStyleSheetPool.get())->Remove((*iter).get());
- }
- }
- }
-
- if (pMasterPage)
- break; // Nur diese eine MasterPage!
- }
-}
-
-
-/*************************************************************************
-|*
-|* MasterPage austauschen
-|*
-|* Entweder erhaelt nSdPageNum eine neue, eigene MasterPage, oder die MasterPage
-|* wird komplett ausgetauscht (gilt dann fuer alle Seiten).
-|*
-|* nSdPageNum : Nummer der Seite, welche die neue MasterPage erhalten soll
-|* rLayoutName : LayoutName der neuen MasterPage
-|* pSourceDoc : Dokument (Vorlage) aus dem die MasterPage geholt wird
-|* bMaster : Die MasterPage von nSdPageNum soll ausgetauscht werden
-|* bCheckMasters: Nicht benutzte MasterPages sollen entfernt werden
-|*
-|* Ist pSourceDoc == NULL, so wird eine leere MasterPage zugewiesen.
-|* Ist rLayoutName leer, so wird die erste MasterPage genommen
-\************************************************************************/
-
-void SdDrawDocument::SetMasterPage(sal_uInt16 nSdPageNum,
- const String& rLayoutName,
- SdDrawDocument* pSourceDoc,
- sal_Bool bMaster,
- sal_Bool bCheckMasters)
-{
- if( mpDocSh )
- mpDocSh->SetWaitCursor( sal_True );
-
- ::svl::IUndoManager* pUndoMgr = mpDocSh->GetUndoManager();
-
- const bool bUndo = IsUndoEnabled();
-
- if( bUndo )
- {
- pUndoMgr->EnterListAction(String(SdResId(STR_UNDO_SET_PRESLAYOUT)), String());
- }
-
- SdPage* pSelectedPage = GetSdPage(nSdPageNum, PK_STANDARD);
- SdPage* pNotes = (SdPage*) GetPage(pSelectedPage->GetPageNum()+1);
- SdPage& rOldMaster = (SdPage&)pSelectedPage->TRG_GetMasterPage();
- SdPage& rOldNotesMaster = (SdPage&)pNotes->TRG_GetMasterPage();
- SdPage* pMaster = NULL;
- SdPage* pNotesMaster = NULL;
- SdPage* pPage = NULL;
- String aOldPageLayoutName(pSelectedPage->GetLayoutName());
- String aOldLayoutName(aOldPageLayoutName);
- aOldLayoutName.Erase(aOldLayoutName.SearchAscii( SD_LT_SEPARATOR ));
-
- String aNewLayoutName( rLayoutName );
-
- if (pSourceDoc)
- {
- List* pReplList = NULL;
- sal_Bool bLayoutReloaded = sal_False; // Wurde ex. Layout wieder geladen?
-
- /*********************************************************************
- |* LayoutName, Page and Notespage
- \*********************************************************************/
- if (rLayoutName.Len() == 0)
- {
- // No LayoutName: take first MasterPage
- pMaster = (SdPage*) pSourceDoc->GetMasterSdPage(0, PK_STANDARD);
- pNotesMaster = (SdPage*) pSourceDoc->GetMasterSdPage(0, PK_NOTES);
- aNewLayoutName = pMaster->GetName();
- }
- else
- {
- String aSearchFor(rLayoutName);
- aSearchFor.AppendAscii( RTL_CONSTASCII_STRINGPARAM( SD_LT_SEPARATOR ));
- aSearchFor.Append( String(SdResId(STR_LAYOUT_OUTLINE))) ;
-
- for (sal_uInt16 nMP = 0; nMP < pSourceDoc->GetMasterPageCount(); nMP++)
- {
- SdPage* pMP = (SdPage*) pSourceDoc->GetMasterPage(nMP);
-
- if (pMP->GetLayoutName() == aSearchFor)
- {
- if (pMP->GetPageKind() == PK_STANDARD)
- pMaster = pMP;
- if (pMP->GetPageKind() == PK_NOTES)
- pNotesMaster = pMP;
- }
- if (pMaster && pNotesMaster)
- break;
- }
- DBG_ASSERT(pMaster, "MasterPage (Standard page) not found");
- DBG_ASSERT(pNotesMaster, "MasterPage (Notes page) not found");
-
- // this should not happen, but looking at crashreports, it does
- if( (pMaster == NULL) || (pNotesMaster == NULL) )
- {
- // so take the first MasterPage
- pMaster = (SdPage*) pSourceDoc->GetMasterSdPage(0, PK_STANDARD);
- pNotesMaster = (SdPage*) pSourceDoc->GetMasterSdPage(0, PK_NOTES);
- aNewLayoutName = pMaster->GetName();
- }
- }
-
- // we should never reach this, but one never knows....
- if( (pMaster == NULL) || (pNotesMaster == NULL) )
- {
- pUndoMgr->LeaveListAction();
-
- if( mpDocSh )
- mpDocSh->SetWaitCursor( sal_False );
-
- OSL_FAIL( "SdDrawDocument::SetMasterPage() failed!" );
-
- return;
- }
-
- if (pSourceDoc != this)
- {
- const sal_uInt16 nMasterPageCount = GetMasterPageCount();
- for ( sal_uInt16 nMPage = 0; nMPage < nMasterPageCount; nMPage++ )
- {
- SdPage* pCheckMaster = (SdPage*)GetMasterPage(nMPage);
- if( pCheckMaster->GetName() == aNewLayoutName )
- {
- bLayoutReloaded = sal_True;
- break;
- }
- }
-
- /*****************************************************************
- |* Praesentationsvorlagen korrigieren bzw. neu anlegen
- \****************************************************************/
- // nur die Praesentationsvorlagen beachten
- String aName;
- SdStyleSheetPool* pSourceStyleSheetPool = (SdStyleSheetPool*) pSourceDoc->GetStyleSheetPool();
- pSourceStyleSheetPool->SetSearchMask(SD_STYLE_FAMILY_MASTERPAGE);
- static_cast<SdStyleSheetPool*>( mxStyleSheetPool.get())->SetSearchMask(SD_STYLE_FAMILY_MASTERPAGE);
-
- pReplList = new List; // Liste fuer ersetzte StyleSheets
- SdStyleSheetVector aCreatedStyles; // Liste fuer erzeugte StyleSheets
-
- SfxStyleSheetBase* pHisSheet = pSourceStyleSheetPool->First();
-
- while (pHisSheet)
- {
- aName = pHisSheet->GetName();
-
- if( aName.Search( aNewLayoutName ) == 0 )
- {
- SfxStyleSheet* pMySheet = static_cast<SfxStyleSheet*>( mxStyleSheetPool->Find(aName, SD_STYLE_FAMILY_MASTERPAGE) );
-
- if (pMySheet)
- {
- // Es ist eine gleichnamige Vorlage vorhanden ist: Inhalte ersetzen
-#ifdef DBG_UTIL
- sal_Bool bTest =
-#endif
- pMySheet->SetName(pHisSheet->GetName());
- DBG_ASSERT(bTest, "StyleSheet-Umbenennung fehlgeschlagen");
- pMySheet->GetItemSet().ClearItem(0); // alle loeschen
-
- StyleSheetUndoAction* pUndoChStyle = new StyleSheetUndoAction(this,
- pMySheet, &pHisSheet->GetItemSet());
- pUndoMgr->AddUndoAction(pUndoChStyle);
- pMySheet->GetItemSet().Put(pHisSheet->GetItemSet());
- pMySheet->Broadcast(SfxSimpleHint(SFX_HINT_DATACHANGED));
- }
- else
- {
- // create new style
- String aHelpFile;
- pMySheet = static_cast<SfxStyleSheet*>( &mxStyleSheetPool->Make(aName, SD_STYLE_FAMILY_MASTERPAGE, pHisSheet->GetMask()) );
- pMySheet->SetHelpId( aHelpFile, pHisSheet->GetHelpId(aHelpFile) );
- pMySheet->GetItemSet().ClearItem(0); // alle loeschen
- pMySheet->GetItemSet().Put(pHisSheet->GetItemSet());
-
- aCreatedStyles.push_back( SdStyleSheetRef( static_cast< SdStyleSheet* >( pMySheet ) ) );
- }
-
- StyleReplaceData* pReplData = new StyleReplaceData;
- pReplData->nNewFamily = pMySheet->GetFamily();
- pReplData->nFamily = pMySheet->GetFamily();
- pReplData->aNewName = pMySheet->GetName();
-
- String aTemp(pMySheet->GetName());
- sal_uInt16 nPos = aTemp.SearchAscii( SD_LT_SEPARATOR );
- aTemp.Erase(0, nPos);
- aTemp.Insert(aOldLayoutName, 0);
- pReplData->aName = aTemp;
- pReplList->Insert(pReplData, LIST_APPEND);
- }
-
- pHisSheet = (SfxStyleSheet*) pSourceStyleSheetPool->Next();
- }
-
- // wenn neue Vorlagen erzeugt wurden:
- // eventuell bestehende Parent-Verkettung der Itemsets in den
- // Vorlagen wieder aufbauen
- if(!aCreatedStyles.empty())
- {
- StyleReplaceData* pRData = (StyleReplaceData*)pReplList->First();
-
- while (pRData)
- {
- SfxStyleSheetBase* pSOld = mxStyleSheetPool->Find(pRData->aName);
- SfxStyleSheetBase* pSNew = mxStyleSheetPool->Find(pRData->aNewName);
-
- if (pSOld && pSNew)
- {
- const String& rParentOfOld = pSOld->GetParent();
- const String& rParentOfNew = pSNew->GetParent();
-
- if (rParentOfOld.Len() > 0 && rParentOfNew.Len() == 0)
- {
-
- for (sal_uLong i = 0; i < pReplList->Count(); i++)
- {
- StyleReplaceData* pRD = (StyleReplaceData*)pReplList->
- GetObject(i);
- if ((pRD->aName == rParentOfOld) && (pRD->aName != pRD->aNewName))
- {
- String aParentOfNew(pRD->aNewName);
- pSNew->SetParent(aParentOfNew);
- break;
- }
- }
- }
- }
- pRData = (StyleReplaceData*) pReplList->Next();
- }
-
- // ab jetzt beim Suchen alle beachten
- pSourceStyleSheetPool->SetSearchMask(SFX_STYLE_FAMILY_ALL);
- mxStyleSheetPool->SetSearchMask(SFX_STYLE_FAMILY_ALL);
- }
-
- if( !aCreatedStyles.empty() )
- {
- // UndoAction fuer das Erzeugen und Einfuegen vorn StyleSheets
- // auf den UndoManager legen
- SdMoveStyleSheetsUndoAction* pMovStyles = new SdMoveStyleSheetsUndoAction( this, aCreatedStyles, sal_True);
- pUndoMgr->AddUndoAction(pMovStyles);
- }
- }
-
- // Layoutnamen auf Basis des Seitenlayoutnamens der Masterpage bilden
- String aPageLayoutName(pMaster->GetLayoutName());
- String aLayoutName = aPageLayoutName;
- aLayoutName.Erase( aLayoutName.SearchAscii( SD_LT_SEPARATOR ));
-
- if (pSourceDoc != this)
- {
- // Aus dem Source-Dokument austragen
- pSourceDoc->RemoveMasterPage(pNotesMaster->GetPageNum());
- pSourceDoc->RemoveMasterPage(pMaster->GetPageNum());
- }
-
- /*********************************************************************
- |* Neue MasterPages ins Dokument eintragen und den Standard- und
- |* Notizseiten das Praesentationslayout ueberbraten
- \********************************************************************/
- if (pSourceDoc != this)
- {
- // Die Masterpages einfuegen:
- // Masterpages von neuen Layouts hinten anhaengen; wird ein Layout
- // dagegen ersetzt, so muss vor der Position der alten Masterpage
- // eingefuegt werden, damit ab jetzt beim Suchen (z. B. SdPage::
- // SetPresentationLayout) die neue Masterpage zuerst gefunden wird
- sal_uInt16 nInsertPos = rOldMaster.GetPageNum();
- BegUndo();
-
- if (!bLayoutReloaded)
- nInsertPos = 0xFFFF;
- InsertMasterPage(pMaster, nInsertPos);
- if( bUndo )
- AddUndo(GetSdrUndoFactory().CreateUndoNewPage(*pMaster));
-
- nInsertPos++;
- if (!bLayoutReloaded)
- nInsertPos = 0xFFFF;
- InsertMasterPage(pNotesMaster, nInsertPos);
- if( bUndo )
- {
- AddUndo(GetSdrUndoFactory().CreateUndoNewPage(*pNotesMaster));
-
- EndUndo(); // schon hier, damit sich Joes Actions ZWISCHEN unsere eigenen schieben
- }
- }
-
- // Liste mit Seiten fuellen
- List* pPageList = new List;
-
-// #98456, this has to be removed according to CL (KA 07/08/2002)
-// #109884# but we need them again to restore the styles of the presentation objects while undo
- pPageList->Insert(pMaster, LIST_APPEND);
- pPageList->Insert(pNotesMaster, LIST_APPEND);
-
- if (bMaster || bLayoutReloaded)
- {
- for (sal_uInt16 nPage = 1; nPage < GetPageCount(); nPage++)
- {
- pPage = (SdPage*) GetPage(nPage);
- String aTest = pPage->GetLayoutName();
- if (aTest == aOldPageLayoutName)
- {
- pPageList->Insert(pPage, LIST_APPEND);
- }
- }
-
- }
- else
- {
- pPageList->Insert(pSelectedPage, LIST_APPEND);
- pPageList->Insert(pNotes, LIST_APPEND);
- }
-
- pPage = (SdPage*)pPageList->First();
- while (pPage)
- {
- AutoLayout eAutoLayout = pPage->GetAutoLayout();
-
- if( bUndo )
- {
- SdPresentationLayoutUndoAction * pPLUndoAction =
- new SdPresentationLayoutUndoAction
- (this,
- pPage->IsMasterPage() ? aLayoutName : aOldLayoutName,
- aLayoutName,
- eAutoLayout, eAutoLayout, sal_False, pPage);
- pUndoMgr->AddUndoAction(pPLUndoAction);
- }
- pPage->SetPresentationLayout(aLayoutName);
- pPage->SetAutoLayout(eAutoLayout);
-
- pPage = (SdPage*)pPageList->Next();
- }
- delete pPageList;
-
- /*********************************************************************
- |* Neue Masterpages angleichen
- \********************************************************************/
- if (pSourceDoc != this)
- {
- // die Masterpages angleichen
- Size aSize(rOldMaster.GetSize());
- Rectangle aBorderRect(rOldMaster.GetLftBorder(),
- rOldMaster.GetUppBorder(),
- rOldMaster.GetRgtBorder(),
- rOldMaster.GetLwrBorder());
- pMaster->ScaleObjects(aSize, aBorderRect, sal_True);
- pMaster->SetSize(aSize);
- pMaster->SetBorder(rOldMaster.GetLftBorder(),
- rOldMaster.GetUppBorder(),
- rOldMaster.GetRgtBorder(),
- rOldMaster.GetLwrBorder());
- pMaster->SetOrientation( rOldMaster.GetOrientation() );
- pMaster->SetAutoLayout(pMaster->GetAutoLayout());
-
- aSize = rOldNotesMaster.GetSize();
- Rectangle aNotesBorderRect(rOldNotesMaster.GetLftBorder(),
- rOldNotesMaster.GetUppBorder(),
- rOldNotesMaster.GetRgtBorder(),
- rOldNotesMaster.GetLwrBorder());
- pNotesMaster->ScaleObjects(aSize, aNotesBorderRect, sal_True);
- pNotesMaster->SetSize(aSize);
- pNotesMaster->SetBorder(rOldNotesMaster.GetLftBorder(),
- rOldNotesMaster.GetUppBorder(),
- rOldNotesMaster.GetRgtBorder(),
- rOldNotesMaster.GetLwrBorder());
- pNotesMaster->SetOrientation( rOldNotesMaster.GetOrientation() );
- pNotesMaster->SetAutoLayout(pNotesMaster->GetAutoLayout());
-
- // Liste der ersetzten Vorlagen mit Inhalt loeschen
- StyleReplaceData* pReplData = (StyleReplaceData*)pReplList->First();
- while (pReplData)
- {
- delete pReplData;
- pReplData = (StyleReplaceData*)pReplList->Next();
- }
- delete pReplList;
-
-
- if( (pSourceDoc->GetDocumentType() == DOCUMENT_TYPE_IMPRESS) &&
- (GetDocumentType() == DOCUMENT_TYPE_DRAW) )
- {
- pMaster->RemoveEmptyPresentationObjects();
- pNotesMaster->RemoveEmptyPresentationObjects();
- }
- }
- }
- else
- {
- /*********************************************************************
- |* Einen neuen Layoutnamen ausdenken
- \********************************************************************/
- String aName = String(SdResId(STR_LAYOUT_DEFAULT_NAME));
- String aTest;
- sal_Bool bNotANewName = sal_True;
- sal_uInt16 nCount = 0;
- sal_uInt16 nMPgCount = GetMasterPageCount();
-
- for (nCount = 0; bNotANewName; nCount++)
- {
- // Testnamen bilden
- aTest = aName; // Standard, Standard1, Standard2, ...
- if (nCount > 0)
- aTest += String::CreateFromInt32( nCount );
-
- // gibt's schon eine, die so heisst?
- bNotANewName = sal_False;
- for (sal_uInt16 nMPg = 1; nMPg < nMPgCount; nMPg++)
- {
- const SdrPage* pTest = GetMasterPage(nMPg);
- String aPageLayoutName(pTest->GetLayoutName());
- aPageLayoutName.Erase( aPageLayoutName.SearchAscii( SD_LT_SEPARATOR ));
-
- if (aPageLayoutName == aTest)
- bNotANewName = sal_True;
- }
- }
- aName = aTest;
- String aPageLayoutName(aName);
- aPageLayoutName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( SD_LT_SEPARATOR ));
- aPageLayoutName += String(SdResId(STR_LAYOUT_OUTLINE));
-
- /*********************************************************************
- |* Neue StyleSheets erzeugen
- \********************************************************************/
- static_cast<SdStyleSheetPool*>( mxStyleSheetPool.get())->CreateLayoutStyleSheets(aName);
- SdStyleSheetVector aCreatedStyles;
- static_cast<SdStyleSheetPool*>( mxStyleSheetPool.get())->CreateLayoutSheetList(aName, aCreatedStyles);
-
- if( bUndo )
- {
- SdMoveStyleSheetsUndoAction* pMovStyles = new SdMoveStyleSheetsUndoAction(this, aCreatedStyles, sal_True);
- pUndoMgr->AddUndoAction(pMovStyles);
- }
-
- /*********************************************************************
- |* Neue MasterPages erzeugen und ins Dokument eintragen
- \********************************************************************/
-
- if( bUndo )
- BegUndo();
-
- pMaster = (SdPage*) AllocPage(sal_True);
- pMaster->SetSize(pSelectedPage->GetSize());
- pMaster->SetBorder(pSelectedPage->GetLftBorder(),
- pSelectedPage->GetUppBorder(),
- pSelectedPage->GetRgtBorder(),
- pSelectedPage->GetLwrBorder() );
- pMaster->SetName(aName);
- pMaster->SetLayoutName(aPageLayoutName);
- InsertMasterPage(pMaster);
-
- if( bUndo )
- AddUndo(GetSdrUndoFactory().CreateUndoNewPage(*pMaster));
-
- pMaster->SetAutoLayout(AUTOLAYOUT_NONE, true, true);
-
- pNotesMaster = (SdPage*) AllocPage(sal_True);
- pNotesMaster->SetPageKind(PK_NOTES);
- pNotesMaster->SetSize(pNotes->GetSize());
- pNotesMaster->SetBorder(pNotes->GetLftBorder(),
- pNotes->GetUppBorder(),
- pNotes->GetRgtBorder(),
- pNotes->GetLwrBorder() );
- pNotesMaster->SetName(aName);
- pNotesMaster->SetLayoutName(aPageLayoutName);
- InsertMasterPage(pNotesMaster);
-
- if( bUndo )
- AddUndo(GetSdrUndoFactory().CreateUndoNewPage(*pNotesMaster));
-
- pNotesMaster->SetAutoLayout(AUTOLAYOUT_NOTES, true, true);
-
- if( bUndo )
- EndUndo();
-
- /*********************************************************************
- |* Liste der betroffenen Standard- und Notizseiten erstellen
- \********************************************************************/
- List* pPageList = new List;
- if (bMaster)
- {
- for (sal_uInt16 nPage = 1; nPage < GetPageCount(); nPage++)
- {
- pPage = (SdPage*) GetPage(nPage);
- const String s(pPage->GetLayoutName());
- if(s == aOldPageLayoutName)
- {
- pPageList->Insert(pPage, LIST_APPEND);
- }
- }
- }
- else
- {
- pPageList->Insert(pSelectedPage, LIST_APPEND);
- pPageList->Insert(pNotes, LIST_APPEND);
- }
-
- /*********************************************************************
- |* An den betroffenen Seiten Praesentations- und Autolayout setzen
- \********************************************************************/
- pPage = (SdPage*)pPageList->First();
- while(pPage)
- {
- AutoLayout eOldAutoLayout = pPage->GetAutoLayout();
- AutoLayout eNewAutoLayout =
- pPage->GetPageKind() == PK_STANDARD ? AUTOLAYOUT_NONE : AUTOLAYOUT_NOTES;
-
- if( bUndo )
- {
- SdPresentationLayoutUndoAction * pPLUndoAction =
- new SdPresentationLayoutUndoAction
- (this, aOldLayoutName, aName,
- eOldAutoLayout, eNewAutoLayout, sal_True,
- pPage);
- pUndoMgr->AddUndoAction(pPLUndoAction);
- }
-
- pPage->SetPresentationLayout(aName);
- pPage->SetAutoLayout(eNewAutoLayout);
-
- pPage = (SdPage*)pPageList->Next();
- }
-
- // Seitenliste loeschen
- delete pPageList;
- }
-
- /*********************************************************************
- |* falls die alten Masterpages nicht mehr benoetigt werden,
- |* muessen sie und die entsprechenden Praesentationsvorlagen
- |* entfernt werden
- \********************************************************************/
- if (bCheckMasters)
- {
- // Alle pruefen
- RemoveUnnecessaryMasterPages();
- }
- else
- {
- // Nur die ausgetauschte MasterPage pruefen
- RemoveUnnecessaryMasterPages(&rOldMaster);
- }
-
- if( bUndo )
- pUndoMgr->LeaveListAction();
-
- if( mpDocSh )
- mpDocSh->SetWaitCursor( sal_False );
-}
-
-
-
-void SdDrawDocument::Merge(SdrModel& rSourceModel,
- sal_uInt16 nFirstPageNum, sal_uInt16 nLastPageNum,
- sal_uInt16 nDestPos,
- bool bMergeMasterPages, bool bAllMasterPages,
- bool bUndo, bool bTreadSourceAsConst)
-{
- sal_uInt16 nMasterPageCount = GetMasterPageCount();
- SdrModel::Merge( rSourceModel, nFirstPageNum, nLastPageNum, nDestPos, bMergeMasterPages, bAllMasterPages, bUndo, bTreadSourceAsConst );
-
- // add style family for each new master page
- for( sal_uInt16 nMaster = nMasterPageCount; nMaster < GetMasterPageCount(); nMaster++ )
- {
- SdPage* pPage = static_cast< SdPage* >( GetMasterPage( nMaster ) );
- if( pPage && pPage->IsMasterPage() && (pPage->GetPageKind() == PK_STANDARD) )
- {
- // new master page created, add its style family
- SdStyleSheetPool* pStylePool = (SdStyleSheetPool*) GetStyleSheetPool();
- if( pStylePool )
- pStylePool->AddStyleFamily( pPage );
- }
- }
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */