summaryrefslogtreecommitdiff
path: root/sd/source
diff options
context:
space:
mode:
authorKurt Zenker <kz@openoffice.org>2009-06-04 16:21:29 +0000
committerKurt Zenker <kz@openoffice.org>2009-06-04 16:21:29 +0000
commitef7c5c7534ecf24b2af1bc0de6e221327b4a4c49 (patch)
tree91654c3c0af54f00d2246874ee38e7a02e7035b4 /sd/source
parente8cad7c6d2daf5b2b4ec672dbf740737fba426fd (diff)
CWS-TOOLING: integrate CWS clnoundo
2009-05-18 09:40:22 +0200 wg r271998 : i102011 2009-04-28 12:20:24 +0200 cl r271318 : CWS-TOOLING: rebase CWS clnoundo to trunk@270723 (milestone: DEV300:m46) 2009-04-02 11:37:14 +0200 cl r270388 : #i100371# check valid positions all the time to avoid crashes during model lock 2009-03-30 13:02:27 +0200 cl r270219 : #i100371# do not create undo actions in drawing layer during load 2009-03-30 12:59:41 +0200 cl r270218 : #i100371# do not create undo actions in drawing layer during load 2009-03-30 12:55:06 +0200 cl r270217 : #i100371# do not create undo actions in drawing layer during load 2009-03-30 12:53:27 +0200 cl r270216 : #i100371# do not create undo actions in drawing layer during load 2009-03-30 12:49:28 +0200 cl r270215 : #i100371# added EnableUndo() and IsUndoEnabled()
Diffstat (limited to 'sd/source')
-rw-r--r--sd/source/core/drawdoc2.cxx26
-rw-r--r--sd/source/core/drawdoc3.cxx125
-rw-r--r--sd/source/filter/xml/sdxmlwrp.cxx2
-rw-r--r--sd/source/ui/dlg/masterlayoutdlg.cxx7
-rw-r--r--sd/source/ui/func/fuexpand.cxx16
-rw-r--r--sd/source/ui/func/fuinsfil.cxx11
-rw-r--r--sd/source/ui/func/fusel.cxx2
-rw-r--r--sd/source/ui/func/fusumry.cxx21
-rw-r--r--sd/source/ui/slidesorter/controller/SlsSelectionManager.cxx111
-rw-r--r--sd/source/ui/toolpanel/controls/DocumentHelper.cxx10
-rw-r--r--sd/source/ui/unoidl/unomodel.cxx69
-rw-r--r--sd/source/ui/view/drbezob.cxx14
-rw-r--r--sd/source/ui/view/drviews2.cxx20
-rw-r--r--sd/source/ui/view/drviews4.cxx31
-rw-r--r--sd/source/ui/view/drviewse.cxx14
-rw-r--r--sd/source/ui/view/sdview.cxx11
-rw-r--r--sd/source/ui/view/sdview2.cxx26
-rw-r--r--sd/source/ui/view/sdview3.cxx63
-rw-r--r--sd/source/ui/view/sdview4.cxx51
-rw-r--r--sd/source/ui/view/viewshe3.cxx19
20 files changed, 437 insertions, 212 deletions
diff --git a/sd/source/core/drawdoc2.cxx b/sd/source/core/drawdoc2.cxx
index d144ec448e8d..2e6f93336745 100644
--- a/sd/source/core/drawdoc2.cxx
+++ b/sd/source/core/drawdoc2.cxx
@@ -812,7 +812,10 @@ BOOL SdDrawDocument::MovePages(USHORT nTargetPage)
USHORT nNoOfPages = GetSdPageCount(PK_STANDARD);
BOOL bSomethingHappened = FALSE;
- BegUndo(String(SdResId(STR_UNDO_MOVEPAGES)));
+ const bool bUndo = IsUndoEnabled();
+
+ if( bUndo )
+ BegUndo(String(SdResId(STR_UNDO_MOVEPAGES)));
// Liste mit selektierten Seiten
List aPageList;
@@ -853,10 +856,12 @@ BOOL SdDrawDocument::MovePages(USHORT nTargetPage)
if (nPage != 0)
{
SdrPage* pPg = GetPage(nPage);
- AddUndo(GetSdrUndoFactory().CreateUndoSetPageNum(*pPg, nPage, 1));
+ if( bUndo )
+ AddUndo(GetSdrUndoFactory().CreateUndoSetPageNum(*pPg, nPage, 1));
MovePage(nPage, 1);
pPg = GetPage(nPage+1);
- AddUndo(GetSdrUndoFactory().CreateUndoSetPageNum(*pPg, nPage+1, 2));
+ if( bUndo )
+ AddUndo(GetSdrUndoFactory().CreateUndoSetPageNum(*pPg, nPage+1, 2));
MovePage(nPage+1, 2);
bSomethingHappened = TRUE;
}
@@ -880,10 +885,12 @@ BOOL SdDrawDocument::MovePages(USHORT nTargetPage)
if (nPage != nTargetPage)
{
SdrPage* pPg = GetPage(nPage);
- AddUndo(GetSdrUndoFactory().CreateUndoSetPageNum(*pPg, nPage, nTargetPage));
+ if( bUndo )
+ AddUndo(GetSdrUndoFactory().CreateUndoSetPageNum(*pPg, nPage, nTargetPage));
MovePage(nPage, nTargetPage);
pPg = GetPage(nPage+1);
- AddUndo(GetSdrUndoFactory().CreateUndoSetPageNum(*pPg, nPage+1, nTargetPage+1));
+ if( bUndo )
+ AddUndo(GetSdrUndoFactory().CreateUndoSetPageNum(*pPg, nPage+1, nTargetPage+1));
MovePage(nPage+1, nTargetPage+1);
bSomethingHappened = TRUE;
}
@@ -893,10 +900,12 @@ BOOL SdDrawDocument::MovePages(USHORT nTargetPage)
if (nPage != nTargetPage)
{
SdrPage* pPg = GetPage(nPage+1);
- AddUndo(GetSdrUndoFactory().CreateUndoSetPageNum(*pPg, nPage+1, nTargetPage+1));
+ if( bUndo )
+ AddUndo(GetSdrUndoFactory().CreateUndoSetPageNum(*pPg, nPage+1, nTargetPage+1));
MovePage(nPage+1, nTargetPage+1);
pPg = GetPage(nPage);
- AddUndo(GetSdrUndoFactory().CreateUndoSetPageNum(*pPg, nPage, nTargetPage));
+ if( bUndo )
+ AddUndo(GetSdrUndoFactory().CreateUndoSetPageNum(*pPg, nPage, nTargetPage));
MovePage(nPage, nTargetPage);
bSomethingHappened = TRUE;
}
@@ -906,7 +915,8 @@ BOOL SdDrawDocument::MovePages(USHORT nTargetPage)
}
}
- EndUndo();
+ if( bUndo )
+ EndUndo();
return bSomethingHappened;
}
diff --git a/sd/source/core/drawdoc3.cxx b/sd/source/core/drawdoc3.cxx
index d380993ba0db..6beaee7082eb 100644
--- a/sd/source/core/drawdoc3.cxx
+++ b/sd/source/core/drawdoc3.cxx
@@ -577,7 +577,11 @@ BOOL SdDrawDocument::InsertBookmarkAsPage(
/**************************************************************************
* Dokument einfuegen
**************************************************************************/
- BegUndo(String(SdResId(STR_UNDO_INSERTPAGES)));
+
+ const bool bUndo = IsUndoEnabled();
+
+ if( bUndo )
+ BegUndo(String(SdResId(STR_UNDO_INSERTPAGES)));
if (!pBookmarkList)
{
@@ -766,8 +770,13 @@ BOOL SdDrawDocument::InsertBookmarkAsPage(
pPage->SetName( pStandardPage->GetRealName() );
}
- AddUndo(GetSdrUndoFactory().CreateUndoDeletePage(*pStandardPage));
+ if( bUndo )
+ AddUndo(GetSdrUndoFactory().CreateUndoDeletePage(*pStandardPage));
+
RemovePage(nDestPageNum);
+
+ if( !bUndo )
+ delete pStandardPage;
}
SdPage* pNotesPage = 0L;
@@ -787,8 +796,13 @@ BOOL SdDrawDocument::InsertBookmarkAsPage(
pNewNotesPage->SetName( pStandardPage->GetRealName() );
}
- AddUndo(GetSdrUndoFactory().CreateUndoDeletePage(*pNotesPage));
+ if( bUndo )
+ AddUndo(GetSdrUndoFactory().CreateUndoDeletePage(*pNotesPage));
+
RemovePage(nDestPageNum);
+
+ if( !bUndo )
+ delete pNotesPage;
}
nReplacedStandardPages++;
@@ -825,8 +839,13 @@ BOOL SdDrawDocument::InsertBookmarkAsPage(
aTest == aMPLayout &&
eKind == pTest->GetPageKind() )
{
- AddUndo(GetSdrUndoFactory().CreateUndoDeletePage(*pRefPage));
+ if( bUndo )
+ AddUndo(GetSdrUndoFactory().CreateUndoDeletePage(*pRefPage));
+
RemoveMasterPage(nPage);
+
+ if( !bUndo )
+ delete pRefPage;
nNewMPageCount--;
break;
}
@@ -876,7 +895,8 @@ BOOL SdDrawDocument::InsertBookmarkAsPage(
// update layout and referred master page
pRefPage->SetPresentationLayout(aLayout);
- AddUndo( GetSdrUndoFactory().CreateUndoPageChangeMasterPage( *pRefPage ) );
+ if( bUndo )
+ AddUndo( GetSdrUndoFactory().CreateUndoPageChangeMasterPage( *pRefPage ) );
if (bScaleObjects)
{
@@ -894,7 +914,8 @@ BOOL SdDrawDocument::InsertBookmarkAsPage(
// update layout and referred master page
pRefPage->SetPresentationLayout(aLayout);
- AddUndo( GetSdrUndoFactory().CreateUndoPageChangeMasterPage( *pRefPage ) );
+ if( bUndo )
+ AddUndo( GetSdrUndoFactory().CreateUndoPageChangeMasterPage( *pRefPage ) );
if (bScaleObjects)
{
@@ -944,7 +965,8 @@ BOOL SdDrawDocument::InsertBookmarkAsPage(
// #91146# Make absolutely sure no double masterpages are there
RemoveUnnecessaryMasterPages(NULL, TRUE, TRUE);
- EndUndo();
+ if( bUndo )
+ EndUndo();
pUndoMgr->LeaveListAction();
return bContinue;
@@ -1321,6 +1343,9 @@ void SdDrawDocument::RemoveUnnecessaryMasterPages(SdPage* pMasterPage, BOOL bOnl
::sd::View* pView = NULL;
SfxUndoManager* pUndoMgr = NULL;
+ if( bUndo && !IsUndoEnabled() )
+ bUndo = FALSE;
+
if (mpDocSh)
{
pUndoMgr = mpDocSh->GetUndoManager();
@@ -1406,11 +1431,17 @@ void SdDrawDocument::RemoveUnnecessaryMasterPages(SdPage* pMasterPage, BOOL bOnl
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
@@ -1480,7 +1511,13 @@ void SdDrawDocument::SetMasterPage(USHORT nSdPageNum,
mpDocSh->SetWaitCursor( TRUE );
SfxUndoManager* pUndoMgr = mpDocSh->GetUndoManager();
- pUndoMgr->EnterListAction(String(SdResId(STR_UNDO_SET_PRESLAYOUT)), String());
+
+ 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);
@@ -1715,15 +1752,19 @@ void SdDrawDocument::SetMasterPage(USHORT nSdPageNum,
if (!bLayoutReloaded)
nInsertPos = 0xFFFF;
InsertMasterPage(pMaster, nInsertPos);
- AddUndo(GetSdrUndoFactory().CreateUndoNewPage(*pMaster));
+ if( bUndo )
+ AddUndo(GetSdrUndoFactory().CreateUndoNewPage(*pMaster));
nInsertPos++;
if (!bLayoutReloaded)
nInsertPos = 0xFFFF;
InsertMasterPage(pNotesMaster, nInsertPos);
- AddUndo(GetSdrUndoFactory().CreateUndoNewPage(*pNotesMaster));
+ if( bUndo )
+ {
+ AddUndo(GetSdrUndoFactory().CreateUndoNewPage(*pNotesMaster));
- EndUndo(); // schon hier, damit sich Joes Actions ZWISCHEN unsere eigenen schieben
+ EndUndo(); // schon hier, damit sich Joes Actions ZWISCHEN unsere eigenen schieben
+ }
}
// Liste mit Seiten fuellen
@@ -1758,13 +1799,16 @@ void SdDrawDocument::SetMasterPage(USHORT nSdPageNum,
{
AutoLayout eAutoLayout = pPage->GetAutoLayout();
- SdPresentationLayoutUndoAction * pPLUndoAction =
- new SdPresentationLayoutUndoAction
- (this,
- pPage->IsMasterPage() ? aLayoutName : aOldLayoutName,
- aLayoutName,
- eAutoLayout, eAutoLayout, FALSE, pPage);
- pUndoMgr->AddUndoAction(pPLUndoAction);
+ if( bUndo )
+ {
+ SdPresentationLayoutUndoAction * pPLUndoAction =
+ new SdPresentationLayoutUndoAction
+ (this,
+ pPage->IsMasterPage() ? aLayoutName : aOldLayoutName,
+ aLayoutName,
+ eAutoLayout, eAutoLayout, FALSE, pPage);
+ pUndoMgr->AddUndoAction(pPLUndoAction);
+ }
pPage->SetPresentationLayout(aLayoutName);
pPage->SetAutoLayout(eAutoLayout);
@@ -1865,13 +1909,20 @@ void SdDrawDocument::SetMasterPage(USHORT nSdPageNum,
static_cast<SdStyleSheetPool*>( mxStyleSheetPool.get())->CreateLayoutStyleSheets(aName);
SdStyleSheetVector aCreatedStyles;
static_cast<SdStyleSheetPool*>( mxStyleSheetPool.get())->CreateLayoutSheetList(aName, aCreatedStyles);
- SdMoveStyleSheetsUndoAction* pMovStyles = new SdMoveStyleSheetsUndoAction(this, aCreatedStyles, TRUE);
- pUndoMgr->AddUndoAction(pMovStyles);
+
+ if( bUndo )
+ {
+ SdMoveStyleSheetsUndoAction* pMovStyles = new SdMoveStyleSheetsUndoAction(this, aCreatedStyles, TRUE);
+ pUndoMgr->AddUndoAction(pMovStyles);
+ }
/*********************************************************************
|* Neue MasterPages erzeugen und ins Dokument eintragen
\********************************************************************/
- BegUndo();
+
+ if( bUndo )
+ BegUndo();
+
pMaster = (SdPage*) AllocPage(TRUE);
pMaster->SetSize(pSelectedPage->GetSize());
pMaster->SetBorder(pSelectedPage->GetLftBorder(),
@@ -1881,7 +1932,10 @@ void SdDrawDocument::SetMasterPage(USHORT nSdPageNum,
pMaster->SetName(aName);
pMaster->SetLayoutName(aPageLayoutName);
InsertMasterPage(pMaster);
- AddUndo(GetSdrUndoFactory().CreateUndoNewPage(*pMaster));
+
+ if( bUndo )
+ AddUndo(GetSdrUndoFactory().CreateUndoNewPage(*pMaster));
+
pMaster->SetAutoLayout(AUTOLAYOUT_NONE, true, true);
pNotesMaster = (SdPage*) AllocPage(TRUE);
@@ -1894,9 +1948,14 @@ void SdDrawDocument::SetMasterPage(USHORT nSdPageNum,
pNotesMaster->SetName(aName);
pNotesMaster->SetLayoutName(aPageLayoutName);
InsertMasterPage(pNotesMaster);
- AddUndo(GetSdrUndoFactory().CreateUndoNewPage(*pNotesMaster));
+
+ if( bUndo )
+ AddUndo(GetSdrUndoFactory().CreateUndoNewPage(*pNotesMaster));
+
pNotesMaster->SetAutoLayout(AUTOLAYOUT_NOTES, true, true);
- EndUndo();
+
+ if( bUndo )
+ EndUndo();
/*********************************************************************
|* Liste der betroffenen Standard- und Notizseiten erstellen
@@ -1930,12 +1989,15 @@ void SdDrawDocument::SetMasterPage(USHORT nSdPageNum,
AutoLayout eNewAutoLayout =
pPage->GetPageKind() == PK_STANDARD ? AUTOLAYOUT_NONE : AUTOLAYOUT_NOTES;
- SdPresentationLayoutUndoAction * pPLUndoAction =
- new SdPresentationLayoutUndoAction
- (this, aOldLayoutName, aName,
- eOldAutoLayout, eNewAutoLayout, TRUE,
- pPage);
- pUndoMgr->AddUndoAction(pPLUndoAction);
+ if( bUndo )
+ {
+ SdPresentationLayoutUndoAction * pPLUndoAction =
+ new SdPresentationLayoutUndoAction
+ (this, aOldLayoutName, aName,
+ eOldAutoLayout, eNewAutoLayout, TRUE,
+ pPage);
+ pUndoMgr->AddUndoAction(pPLUndoAction);
+ }
pPage->SetPresentationLayout(aName);
pPage->SetAutoLayout(eNewAutoLayout);
@@ -1963,7 +2025,8 @@ void SdDrawDocument::SetMasterPage(USHORT nSdPageNum,
RemoveUnnecessaryMasterPages(&rOldMaster);
}
- pUndoMgr->LeaveListAction();
+ if( bUndo )
+ pUndoMgr->LeaveListAction();
if( mpDocSh )
mpDocSh->SetWaitCursor( FALSE );
diff --git a/sd/source/filter/xml/sdxmlwrp.cxx b/sd/source/filter/xml/sdxmlwrp.cxx
index edd95f41bc29..f07ba9974001 100644
--- a/sd/source/filter/xml/sdxmlwrp.cxx
+++ b/sd/source/filter/xml/sdxmlwrp.cxx
@@ -460,6 +460,7 @@ sal_Bool SdXMLFilter::Import( ErrCode& nError )
// -------------------------------------
SdDrawDocument* pDoc = mrDocShell.GetDoc();
+ pDoc->EnableUndo(false);
pDoc->NewOrLoadCompleted( NEW_DOC );
pDoc->CreateFirstPages();
pDoc->StopWorkStartupDelay();
@@ -806,6 +807,7 @@ sal_Bool SdXMLFilter::Import( ErrCode& nError )
}
}
+ pDoc->EnableUndo(true);
mrDocShell.ClearUndoBuffer();
return nRet == 0;
}
diff --git a/sd/source/ui/dlg/masterlayoutdlg.cxx b/sd/source/ui/dlg/masterlayoutdlg.cxx
index ca9ecc017515..1547b7c3f0fa 100644
--- a/sd/source/ui/dlg/masterlayoutdlg.cxx
+++ b/sd/source/ui/dlg/masterlayoutdlg.cxx
@@ -169,9 +169,14 @@ void MasterLayoutDialog::remove( PresObjKind eKind )
if( pObject )
{
- mpDoc->AddUndo(mpDoc->GetSdrUndoFactory().CreateUndoDeleteObject(*pObject));
+ const bool bUndo = mpDoc->IsUndoEnabled();
+ if( bUndo )
+ mpDoc->AddUndo(mpDoc->GetSdrUndoFactory().CreateUndoDeleteObject(*pObject));
SdrObjList* pOL =pObject->GetObjList();
UINT32 nOrdNum=pObject->GetOrdNumDirect();
pOL->RemoveObject(nOrdNum);
+
+ if( !bUndo )
+ SdrObject::Free(pObject);
}
}
diff --git a/sd/source/ui/func/fuexpand.cxx b/sd/source/ui/func/fuexpand.cxx
index cc8d582aea91..d71456a7409a 100644
--- a/sd/source/ui/func/fuexpand.cxx
+++ b/sd/source/ui/func/fuexpand.cxx
@@ -122,7 +122,10 @@ void FuExpandPage::DoExecute( SfxRequest& )
if (pActualOutline)
{
- mpView->BegUndo(String(SdResId(STR_UNDO_EXPAND_PAGE)));
+ const bool bUndo = mpView->IsUndoEnabled();
+
+ if( bUndo )
+ mpView->BegUndo(String(SdResId(STR_UNDO_EXPAND_PAGE)));
// Aktuelles Gliederungsobjekt in Outliner setzen
OutlinerParaObject* pParaObj = pActualOutline->GetOutlinerParaObject();
@@ -159,7 +162,9 @@ void FuExpandPage::DoExecute( SfxRequest& )
// Seite hinter aktueller Seite einfuegen
mpDoc->InsertPage(pPage, nActualPageNum + nPos);
nPos++;
- mpView->AddUndo(mpDoc->GetSdrUndoFactory().CreateUndoNewPage(*pPage));
+
+ if( bUndo )
+ mpView->AddUndo(mpDoc->GetSdrUndoFactory().CreateUndoNewPage(*pPage));
// MasterPage der aktuellen Seite verwenden
pPage->TRG_SetMasterPage(pActualPage->TRG_GetMasterPage());
@@ -180,7 +185,9 @@ void FuExpandPage::DoExecute( SfxRequest& )
// Seite hinter aktueller Seite einfuegen
mpDoc->InsertPage(pNotesPage, nActualPageNum + nPos);
nPos++;
- mpView->AddUndo(mpDoc->GetSdrUndoFactory().CreateUndoNewPage(*pNotesPage));
+
+ if( bUndo )
+ mpView->AddUndo(mpDoc->GetSdrUndoFactory().CreateUndoNewPage(*pNotesPage));
// MasterPage der aktuellen Seite verwenden
pNotesPage->TRG_SetMasterPage(pActualNotesPage->TRG_GetMasterPage());
@@ -258,7 +265,8 @@ void FuExpandPage::DoExecute( SfxRequest& )
pPara = pOutl->GetParagraph( ++nParaPos );
}
- mpView->EndUndo();
+ if( bUndo )
+ mpView->EndUndo();
}
delete pOutl;
diff --git a/sd/source/ui/func/fuinsfil.cxx b/sd/source/ui/func/fuinsfil.cxx
index bcbfed2ab6c8..0dea41e10ca9 100644
--- a/sd/source/ui/func/fuinsfil.cxx
+++ b/sd/source/ui/func/fuinsfil.cxx
@@ -586,7 +586,9 @@ void FuInsertFile::InsTextOrRTFinDrMode(SfxMedium* pMedium)
SdrRectObj* pTO = new SdrRectObj(OBJ_TEXT);
pTO->SetOutlinerParaObject(pOPO);
- mpView->BegUndo(String(SdResId(STR_UNDO_INSERT_TEXTFRAME)));
+ const bool bUndo = mpView->IsUndoEnabled();
+ if( bUndo )
+ mpView->BegUndo(String(SdResId(STR_UNDO_INSERT_TEXTFRAME)));
pPage->InsertObject(pTO);
// koennte groesser sein als die max. erlaubte Groesse:
@@ -611,8 +613,11 @@ void FuInsertFile::InsTextOrRTFinDrMode(SfxMedium* pMedium)
pTO->SetTextLink(aFile, aFilterName, gsl_getSystemTextEncoding() );
}
- mpView->AddUndo(mpDoc->GetSdrUndoFactory().CreateUndoInsertObject(*pTO));
- mpView->EndUndo();
+ if( bUndo )
+ {
+ mpView->AddUndo(mpDoc->GetSdrUndoFactory().CreateUndoInsertObject(*pTO));
+ mpView->EndUndo();
+ }
}
}
delete pOutliner;
diff --git a/sd/source/ui/func/fusel.cxx b/sd/source/ui/func/fusel.cxx
index 068686d4a709..9f534ede7006 100644
--- a/sd/source/ui/func/fusel.cxx
+++ b/sd/source/ui/func/fusel.cxx
@@ -796,7 +796,7 @@ BOOL FuSelection::MouseButtonUp(const MouseEvent& rMEvt)
{
SfxStyleSheet* pStyleSheet = static_cast<SfxStyleSheet*>(
pPool->GetActualStyleSheet());
- if (pStyleSheet != NULL)
+ if (pStyleSheet != NULL && mpView->IsUndoEnabled() )
{
// #108981#
// Added UNDOs for the WaterCan mode. This was never done in
diff --git a/sd/source/ui/func/fusumry.cxx b/sd/source/ui/func/fusumry.cxx
index b7b497401a55..0e9e6970d76d 100644
--- a/sd/source/ui/func/fusumry.cxx
+++ b/sd/source/ui/func/fusumry.cxx
@@ -110,6 +110,8 @@ void FuSummaryPage::DoExecute( SfxRequest& )
i++;
}
+ bool bBegUndo = false;
+
SfxStyleSheet* pStyle = NULL;
for (i = nFirstPage; i < nCount; i++)
@@ -128,7 +130,14 @@ void FuSummaryPage::DoExecute( SfxRequest& )
/**********************************************************
* Inhaltsverzeichnis-Seite einfuegen und Outliner anlegen
**********************************************************/
- mpView->BegUndo(String(SdResId(STR_UNDO_SUMMARY_PAGE)));
+ const bool bUndo = mpView->IsUndoEnabled();
+
+ if( bUndo )
+ {
+ mpView->BegUndo(String(SdResId(STR_UNDO_SUMMARY_PAGE)));
+ bBegUndo = true;
+ }
+
SetOfByte aVisibleLayers = pActualPage->TRG_GetMasterPageVisibleLayers();
// Seite mit Titel & Gliederung!
@@ -141,7 +150,8 @@ void FuSummaryPage::DoExecute( SfxRequest& )
// Seite hinten einfuegen
mpDoc->InsertPage(pSummaryPage, nCount * 2 + 1);
- mpView->AddUndo(mpDoc->GetSdrUndoFactory().CreateUndoNewPage(*pSummaryPage));
+ if( bUndo )
+ mpView->AddUndo(mpDoc->GetSdrUndoFactory().CreateUndoNewPage(*pSummaryPage));
// MasterPage der aktuellen Seite verwenden
pSummaryPage->TRG_SetMasterPage(pActualPage->TRG_GetMasterPage());
@@ -161,7 +171,9 @@ void FuSummaryPage::DoExecute( SfxRequest& )
// Seite hinten einfuegen
mpDoc->InsertPage(pNotesPage, nCount * 2 + 2);
- mpView->AddUndo(mpDoc->GetSdrUndoFactory().CreateUndoNewPage(*pNotesPage));
+
+ if( bUndo )
+ mpView->AddUndo(mpDoc->GetSdrUndoFactory().CreateUndoNewPage(*pNotesPage));
// MasterPage der aktuellen Seite verwenden
pNotesPage->TRG_SetMasterPage(pActualNotesPage->TRG_GetMasterPage());
@@ -218,7 +230,8 @@ void FuSummaryPage::DoExecute( SfxRequest& )
aAttr.Put(XFillStyleItem(XFILL_NONE));
pTextObj->SetMergedItemSet(aAttr);
- mpView->EndUndo();
+ if( bBegUndo )
+ mpView->EndUndo();
delete pOutl;
DrawViewShell* pDrawViewShell= dynamic_cast< DrawViewShell* >( mpViewShell );
diff --git a/sd/source/ui/slidesorter/controller/SlsSelectionManager.cxx b/sd/source/ui/slidesorter/controller/SlsSelectionManager.cxx
index c3040bd48853..f1d3162ca034 100644
--- a/sd/source/ui/slidesorter/controller/SlsSelectionManager.cxx
+++ b/sd/source/ui/slidesorter/controller/SlsSelectionManager.cxx
@@ -60,6 +60,7 @@
using namespace ::com::sun::star;
+using namespace ::com::sun::star::drawing;
using namespace ::com::sun::star::uno;
using namespace ::sd::slidesorter::model;
using namespace ::sd::slidesorter::view;
@@ -156,52 +157,34 @@ void SelectionManager::DeleteSelectedPages (void)
void SelectionManager::DeleteSelectedNormalPages (const ::std::vector<SdPage*>& rSelectedPages)
{
// Prepare the deletion via the UNO API.
- Reference<drawing::XDrawPages> xPages;
OSL_ASSERT(mrSlideSorter.GetModel().GetEditMode() == EM_PAGE);
- Reference<drawing::XDrawPagesSupplier> xDrawPagesSupplier (
- mrSlideSorter.GetModel().GetDocument()->getUnoModel(), UNO_QUERY);
- if (xDrawPagesSupplier.is())
- xPages = xDrawPagesSupplier->getDrawPages();
-
- SdDrawDocument* pDocument = mrSlideSorter.GetModel().GetDocument();
- OSL_ASSERT(pDocument!=NULL);
-
- // Iterate over all pages that where seleted when this method was called
- // and delete the draw page the notes page. The iteration is done in
- // reverse order so that when one slide is not deleted (to avoid an
- // empty document) the remaining slide is the first one.
- ::std::vector<SdPage*>::const_reverse_iterator aI;
- for (aI=rSelectedPages.rbegin(); aI!=rSelectedPages.rend(); aI++)
+ try
{
- // Do not delete the last slide in the document.
- if (pDocument->GetSdPageCount(PK_STANDARD) <= 1)
- break;
-
- USHORT nPage = ((*aI)->GetPageNum()-1) / 2;
-
- // Get pointers to the page and its notes page.
- SdPage* pPage = pDocument->GetSdPage (nPage, PK_STANDARD);
- SdPage* pNotesPage = pDocument->GetSdPage (nPage, PK_NOTES);
-
- DBG_ASSERT(pPage!=NULL, "page does not exist");
- DBG_ASSERT(pNotesPage!=NULL, "notes does not exist");
-
- // Remove regular slides with the API.
- if (xPages.is())
+ Reference<drawing::XDrawPagesSupplier> xDrawPagesSupplier( mrSlideSorter.GetModel().GetDocument()->getUnoModel(), UNO_QUERY_THROW );
+ Reference<drawing::XDrawPages> xPages( xDrawPagesSupplier->getDrawPages(), UNO_QUERY_THROW );
+
+ // Iterate over all pages that where seleted when this method was called
+ // and delete the draw page the notes page. The iteration is done in
+ // reverse order so that when one slide is not deleted (to avoid an
+ // empty document) the remaining slide is the first one.
+ ::std::vector<SdPage*>::const_reverse_iterator aI;
+ for (aI=rSelectedPages.rbegin(); aI!=rSelectedPages.rend(); aI++)
{
- SlideSorterView& rView (mrSlideSorter.GetView());
+ // Do not delete the last slide in the document.
+ if (xPages->getCount() <= 1)
+ break;
- // Add undo actions and delete the pages. The order of adding
- // the undo actions is important.
- rView.AddUndo(rView.GetModel()->GetSdrUndoFactory().CreateUndoDeletePage(*pNotesPage));
- rView.AddUndo(rView.GetModel()->GetSdrUndoFactory().CreateUndoDeletePage(*pPage));
+ USHORT nPage = ((*aI)->GetPageNum()-1) / 2;
- // The XDrawPagesSupplier deletes both the slide and notes page.
- xPages->remove (Reference<drawing::XDrawPage>(
- pPage->getUnoPage(), UNO_QUERY));
+ Reference< XDrawPage > xPage( xPages->getByIndex( nPage ), UNO_QUERY_THROW );
+ xPages->remove(xPage);
}
}
+ catch( Exception& )
+ {
+ DBG_ERROR("SelectionManager::DeleteSelectedNormalPages(), exception caught!");
+ }
}
@@ -212,44 +195,32 @@ void SelectionManager::DeleteSelectedMasterPages (const ::std::vector<SdPage*>&
// Prepare the deletion via the UNO API.
OSL_ASSERT(mrSlideSorter.GetModel().GetEditMode() == EM_MASTERPAGE);
- SdDrawDocument* pDocument = mrSlideSorter.GetModel().GetDocument();
- OSL_ASSERT(pDocument!=NULL);
-
- // Iterate over all pages that where seleted when this method was called
- // and delete the draw page the notes page. The iteration is done in
- // reverse order so that when one slide is not deleted (to avoid an
- // empty document) the remaining slide is the first one.
- ::std::vector<SdPage*>::const_reverse_iterator aI;
- for (aI=rSelectedPages.rbegin(); aI!=rSelectedPages.rend(); aI++)
+ try
{
- // Do not delete the last slide in the document.
- if (pDocument->GetMasterSdPageCount(PK_STANDARD) <= 1)
- break;
-
- USHORT nPage = ((*aI)->GetPageNum()-1) / 2;
-
- // Get pointers to the page and its notes page.
- SdPage* pPage = pDocument->GetMasterSdPage (nPage, PK_STANDARD);
- SdPage* pNotesPage = pDocument->GetMasterSdPage (nPage, PK_NOTES);
-
- DBG_ASSERT(pPage!=NULL, "page does not exist");
- DBG_ASSERT(pNotesPage!=NULL, "notes does not exist");
-
- // Remove master slides with the core since the API does not only
- // remove but also delete the page.
- if (pDocument->GetMasterPageUserCount(pPage) == 0)
+ Reference<drawing::XMasterPagesSupplier> xDrawPagesSupplier( mrSlideSorter.GetModel().GetDocument()->getUnoModel(), UNO_QUERY_THROW );
+ Reference<drawing::XDrawPages> xPages( xDrawPagesSupplier->getMasterPages(), UNO_QUERY_THROW );
+
+ // Iterate over all pages that where seleted when this method was called
+ // and delete the draw page the notes page. The iteration is done in
+ // reverse order so that when one slide is not deleted (to avoid an
+ // empty document) the remaining slide is the first one.
+ ::std::vector<SdPage*>::const_reverse_iterator aI;
+ for (aI=rSelectedPages.rbegin(); aI!=rSelectedPages.rend(); aI++)
{
- SlideSorterView& rView (mrSlideSorter.GetView());
+ // Do not delete the last slide in the document.
+ if (xPages->getCount() <= 1)
+ break;
- // Add undo actions and delete the pages. The order of adding
- // the undo actions is important.
- rView.AddUndo(rView.GetModel()->GetSdrUndoFactory().CreateUndoDeletePage(*pNotesPage));
- rView.AddUndo(rView.GetModel()->GetSdrUndoFactory().CreateUndoDeletePage(*pPage));
+ USHORT nPage = ((*aI)->GetPageNum()-1) / 2;
- pDocument->RemoveMasterPage (pPage->GetPageNum());
- pDocument->RemoveMasterPage (pNotesPage->GetPageNum());
+ Reference< XDrawPage > xPage( xPages->getByIndex( nPage ), UNO_QUERY_THROW );
+ xPages->remove(xPage);
}
}
+ catch( Exception& )
+ {
+ DBG_ERROR("SelectionManager::DeleteSelectedMasterPages(), exception caught!");
+ }
}
diff --git a/sd/source/ui/toolpanel/controls/DocumentHelper.cxx b/sd/source/ui/toolpanel/controls/DocumentHelper.cxx
index 8da7fae3eb67..19e51186299b 100644
--- a/sd/source/ui/toolpanel/controls/DocumentHelper.cxx
+++ b/sd/source/ui/toolpanel/controls/DocumentHelper.cxx
@@ -529,8 +529,9 @@ SdPage* DocumentHelper::ProvideMasterPage (
if (pMasterPage->GetModel() != &rTargetDocument)
{
pMasterPageInDocument = AddMasterPage (rTargetDocument, pMasterPage, nInsertionIndex);
- rTargetDocument.AddUndo(
- rTargetDocument.GetSdrUndoFactory().CreateUndoNewPage(*pMasterPageInDocument));
+ if( rTargetDocument.IsUndoEnabled() )
+ rTargetDocument.AddUndo(
+ rTargetDocument.GetSdrUndoFactory().CreateUndoNewPage(*pMasterPageInDocument));
}
else
pMasterPageInDocument = pMasterPage;
@@ -538,8 +539,9 @@ SdPage* DocumentHelper::ProvideMasterPage (
{
SdPage* pClonedNotesMasterPage
= AddMasterPage (rTargetDocument, pNotesMasterPage, nInsertionIndex+1);
- rTargetDocument.AddUndo(
- rTargetDocument.GetSdrUndoFactory().CreateUndoNewPage(*pClonedNotesMasterPage));
+ if( rTargetDocument.IsUndoEnabled() )
+ rTargetDocument.AddUndo(
+ rTargetDocument.GetSdrUndoFactory().CreateUndoNewPage(*pClonedNotesMasterPage));
}
}
return pMasterPageInDocument;
diff --git a/sd/source/ui/unoidl/unomodel.cxx b/sd/source/ui/unoidl/unomodel.cxx
index 7855039b6c46..3790449f4695 100644
--- a/sd/source/ui/unoidl/unomodel.cxx
+++ b/sd/source/ui/unoidl/unomodel.cxx
@@ -88,6 +88,7 @@
#include <sdresid.hxx>
#include <sdpage.hxx>
+#include <strings.hrc>
#include "unohelp.hxx"
#include <unolayer.hxx>
#include <unoprnms.hxx>
@@ -2453,10 +2454,12 @@ void SAL_CALL SdDrawPagesAccess::remove( const uno::Reference< drawing::XDrawPag
{
OGuard aGuard( Application::GetSolarMutex() );
- if( NULL == mpModel )
+ if( NULL == mpModel || mpModel->mpDoc == NULL )
throw lang::DisposedException();
- sal_uInt16 nPageCount = mpModel->mpDoc->GetSdPageCount( PK_STANDARD );
+ SdDrawDocument& rDoc = *mpModel->mpDoc;
+
+ sal_uInt16 nPageCount = rDoc.GetSdPageCount( PK_STANDARD );
if( nPageCount > 1 )
{
// pPage von xPage besorgen und dann die Id (nPos )ermitteln
@@ -2464,16 +2467,33 @@ void SAL_CALL SdDrawPagesAccess::remove( const uno::Reference< drawing::XDrawPag
if( pSvxPage )
{
SdPage* pPage = (SdPage*) pSvxPage->GetSdrPage();
- if(pPage)
+ if(pPage && ( pPage->GetPageKind() == PK_STANDARD ) )
{
- // Es duerfen nur Standardpages DIREKT geloescht werden
- if( pPage->GetPageKind() == PK_STANDARD )
+ sal_uInt16 nPage = pPage->GetPageNum();
+
+ SdPage* pNotesPage = static_cast< SdPage* >( rDoc.GetPage( nPage+1 ) );
+
+ bool bUndo = rDoc.IsUndoEnabled();
+ if( bUndo )
{
- sal_uInt16 nPage = pPage->GetPageNum();
- mpModel->mpDoc->RemovePage( nPage );
+ // Add undo actions and delete the pages. The order of adding
+ // the undo actions is important.
+ rDoc.BegUndo( SdResId( STR_UNDO_DELETEPAGES ) );
+ rDoc.AddUndo(rDoc.GetSdrUndoFactory().CreateUndoDeletePage(*pNotesPage));
+ rDoc.AddUndo(rDoc.GetSdrUndoFactory().CreateUndoDeletePage(*pPage));
+ }
+
+ rDoc.RemovePage( nPage ); // the page
+ rDoc.RemovePage( nPage ); // the notes page
- // Die darauffolgende Seite ist die dazugeoerige Notizseite
- mpModel->mpDoc->RemovePage( nPage );
+ if( bUndo )
+ {
+ rDoc.EndUndo();
+ }
+ else
+ {
+ delete pNotesPage;
+ delete pPage;
}
}
}
@@ -2708,9 +2728,11 @@ void SAL_CALL SdMasterPagesAccess::remove( const uno::Reference< drawing::XDrawP
{
OGuard aGuard( Application::GetSolarMutex() );
- if( NULL == mpModel )
+ if( NULL == mpModel || mpModel->mpDoc == NULL )
throw lang::DisposedException();
+ SdDrawDocument& rDoc = *mpModel->mpDoc;
+
SdMasterPage* pSdPage = SdMasterPage::getImplementation( xPage );
if(pSdPage == NULL)
return;
@@ -2726,10 +2748,31 @@ void SAL_CALL SdMasterPagesAccess::remove( const uno::Reference< drawing::XDrawP
if( pPage->GetPageKind() == PK_STANDARD )
{
sal_uInt16 nPage = pPage->GetPageNum();
- mpModel->mpDoc->RemoveMasterPage( nPage );
- // next page is the notes master
- mpModel->mpDoc->RemoveMasterPage( nPage );
+ SdPage* pNotesPage = static_cast< SdPage* >( rDoc.GetMasterPage( nPage+1 ) );
+
+ bool bUndo = rDoc.IsUndoEnabled();
+ if( bUndo )
+ {
+ // Add undo actions and delete the pages. The order of adding
+ // the undo actions is important.
+ rDoc.BegUndo( SdResId( STR_UNDO_DELETEPAGES ) );
+ rDoc.AddUndo(rDoc.GetSdrUndoFactory().CreateUndoDeletePage(*pNotesPage));
+ rDoc.AddUndo(rDoc.GetSdrUndoFactory().CreateUndoDeletePage(*pPage));
+ }
+
+ rDoc.RemoveMasterPage( nPage );
+ rDoc.RemoveMasterPage( nPage );
+
+ if( bUndo )
+ {
+ rDoc.EndUndo();
+ }
+ else
+ {
+ delete pNotesPage;
+ delete pPage;
+ }
}
}
diff --git a/sd/source/ui/view/drbezob.cxx b/sd/source/ui/view/drbezob.cxx
index d5603bd8818b..a1c68e18e131 100644
--- a/sd/source/ui/view/drbezob.cxx
+++ b/sd/source/ui/view/drbezob.cxx
@@ -307,11 +307,19 @@ void BezierObjectBar::Execute(SfxRequest& rReq)
case SID_BEZIER_CLOSE:
{
SdrPathObj* pPathObj = (SdrPathObj*) rMarkList.GetMark(0)->GetMarkedSdrObj();
- mpView->BegUndo(String(SdResId(STR_UNDO_BEZCLOSE)));
+ const bool bUndo = mpView->IsUndoEnabled();
+ if( bUndo )
+ mpView->BegUndo(String(SdResId(STR_UNDO_BEZCLOSE)));
+
mpView->UnmarkAllPoints();
- mpView->AddUndo(mpView->GetModel()->GetSdrUndoFactory().CreateUndoGeoObject(*pPathObj));
+
+ if( bUndo )
+ mpView->AddUndo(mpView->GetModel()->GetSdrUndoFactory().CreateUndoGeoObject(*pPathObj));
+
pPathObj->ToggleClosed();
- mpView->EndUndo();
+
+ if( bUndo )
+ mpView->EndUndo();
break;
}
}
diff --git a/sd/source/ui/view/drviews2.cxx b/sd/source/ui/view/drviews2.cxx
index c3afe3dda4c7..27d5f6202369 100644
--- a/sd/source/ui/view/drviews2.cxx
+++ b/sd/source/ui/view/drviews2.cxx
@@ -254,6 +254,8 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq)
const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList();
ULONG nCount = rMarkList.GetMarkCount();
+ const bool bUndo = mpDrawView->IsUndoEnabled();
+
for (ULONG i=0; i<nCount; i++)
{
SfxItemSet aAttr(GetDoc()->GetPool());
@@ -269,15 +271,19 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq)
if (rFillStyle.GetValue() == XFILL_NONE)
{
- // Vorlage hat keine Fuellung,
- // daher hart attributieren: Fuellung setzen
- if (!bMergeUndo)
+ if( bUndo )
{
- bMergeUndo = TRUE;
- pUndoManager->EnterListAction( String(), String() );
- mpDrawView->BegUndo();
+ // Vorlage hat keine Fuellung,
+ // daher hart attributieren: Fuellung setzen
+ if (!bMergeUndo)
+ {
+ bMergeUndo = TRUE;
+ pUndoManager->EnterListAction( String(), String() );
+ mpDrawView->BegUndo();
+ }
+
+ mpDrawView->AddUndo(GetDoc()->GetSdrUndoFactory().CreateUndoAttrObject(*pObj));
}
- mpDrawView->AddUndo(GetDoc()->GetSdrUndoFactory().CreateUndoAttrObject(*pObj));
aAttr.Put(XFillStyleItem(XFILL_SOLID));
aAttr.Put(XFillColorItem(String(), COL_WHITE));
diff --git a/sd/source/ui/view/drviews4.cxx b/sd/source/ui/view/drviews4.cxx
index 229e0b8c6eb1..1f98a0705d97 100644
--- a/sd/source/ui/view/drviews4.cxx
+++ b/sd/source/ui/view/drviews4.cxx
@@ -31,6 +31,8 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sd.hxx"
+#include <com/sun/star/drawing/XDrawPagesSupplier.hpp>
+
#include "DrawViewShell.hxx"
#include <vcl/msgbox.hxx>
#include <svtools/urlbmk.hxx>
@@ -92,6 +94,8 @@ namespace sd {
#pragma optimize ( "", off )
#endif
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::drawing;
/*************************************************************************
|*
@@ -102,25 +106,20 @@ namespace sd {
void DrawViewShell::DeleteActualPage()
{
USHORT nPage = maTabControl.GetCurPageId() - 1;
- SdPage* pPage = GetDoc()->GetSdPage(nPage,PK_STANDARD);
-
-#ifdef DBG_UTIL
- USHORT nPageCount = GetDoc()->GetPageCount();
- DBG_ASSERT(nPageCount > 1, "aber das ist die letzte!");
-#endif
mpDrawView->SdrEndTextEdit();
- mpDrawView->BegUndo();
-
- mpDrawView->AddUndo(GetDoc()->GetSdrUndoFactory().CreateUndoDeletePage(*pPage));
- GetDoc()->RemovePage(pPage->GetPageNum());
-
- pPage = GetDoc()->GetSdPage(nPage, PK_NOTES);
- mpDrawView->AddUndo(GetDoc()->GetSdrUndoFactory().CreateUndoDeletePage(*pPage));
- GetDoc()->RemovePage(pPage->GetPageNum());
-
- mpDrawView->EndUndo();
+ try
+ {
+ Reference<XDrawPagesSupplier> xDrawPagesSupplier( GetDoc()->getUnoModel(), UNO_QUERY_THROW );
+ Reference<XDrawPages> xPages( xDrawPagesSupplier->getDrawPages(), UNO_QUERY_THROW );
+ Reference< XDrawPage > xPage( xPages->getByIndex( nPage ), UNO_QUERY_THROW );
+ xPages->remove( xPage );
+ }
+ catch( Exception& )
+ {
+ DBG_ERROR("SelectionManager::DeleteSelectedMasterPages(), exception caught!");
+ }
}
/*************************************************************************
diff --git a/sd/source/ui/view/drviewse.cxx b/sd/source/ui/view/drviewse.cxx
index 7cc9de9f611f..0b3ecf1af6e7 100644
--- a/sd/source/ui/view/drviewse.cxx
+++ b/sd/source/ui/view/drviewse.cxx
@@ -727,11 +727,19 @@ void DrawViewShell::FuSupport(SfxRequest& rReq)
if ( rMarkList.GetMark(0) && !mpDrawView->IsAction() )
{
SdrPathObj* pPathObj = (SdrPathObj*) rMarkList.GetMark(0)->GetMarkedSdrObj();
- mpDrawView->BegUndo(String(SdResId(STR_UNDO_BEZCLOSE)));
+ const bool bUndo = mpDrawView->IsUndoEnabled();
+ if( bUndo )
+ mpDrawView->BegUndo(String(SdResId(STR_UNDO_BEZCLOSE)));
+
mpDrawView->UnmarkAllPoints();
- mpDrawView->AddUndo(new SdrUndoGeoObj(*pPathObj));
+
+ if( bUndo )
+ mpDrawView->AddUndo(new SdrUndoGeoObj(*pPathObj));
+
pPathObj->ToggleClosed();
- mpDrawView->EndUndo();
+
+ if( bUndo )
+ mpDrawView->EndUndo();
}
rReq.Done();
}
diff --git a/sd/source/ui/view/sdview.cxx b/sd/source/ui/view/sdview.cxx
index 53532d86d8e1..eb3665fa05f2 100644
--- a/sd/source/ui/view/sdview.cxx
+++ b/sd/source/ui/view/sdview.cxx
@@ -1252,8 +1252,15 @@ IMPL_LINK( View, OnParagraphRemovingHdl, ::Outliner *, pOutliner )
bool View::isRecordingUndo() const
{
- sd::UndoManager* pUndoManager = mpDoc ? mpDoc->GetUndoManager() : 0;
- return pUndoManager && pUndoManager->isInListAction();
+ if( mpDoc && mpDoc->IsUndoEnabled() )
+ {
+ sd::UndoManager* pUndoManager = mpDoc ? mpDoc->GetUndoManager() : 0;
+ return pUndoManager && pUndoManager->isInListAction();
+ }
+ else
+ {
+ return false;
+ }
}
void View::AddCustomHdl()
diff --git a/sd/source/ui/view/sdview2.cxx b/sd/source/ui/view/sdview2.cxx
index 0c19247b14e1..bcf84ec006cf 100644
--- a/sd/source/ui/view/sdview2.cxx
+++ b/sd/source/ui/view/sdview2.cxx
@@ -421,10 +421,13 @@ void View::StartDrag( const Point& rStartPos, ::Window* pWindow )
mpDragSrcMarkList = new SdrMarkList(GetMarkedObjectList());
mnDragSrcPgNum = GetSdrPageView()->GetPage()->GetPageNum();
- String aStr( SdResId(STR_UNDO_DRAGDROP) );
- aStr += sal_Unicode(' ');
- aStr += mpDragSrcMarkList->GetMarkDescription();
- BegUndo(aStr);
+ if( IsUndoEnabled() )
+ {
+ String aStr( SdResId(STR_UNDO_DRAGDROP) );
+ aStr += sal_Unicode(' ');
+ aStr += mpDragSrcMarkList->GetMarkDescription();
+ BegUndo(aStr);
+ }
CreateDragDataObject( this, *pWindow, rStartPos );
}
}
@@ -433,6 +436,8 @@ void View::StartDrag( const Point& rStartPos, ::Window* pWindow )
void View::DragFinished( sal_Int8 nDropAction )
{
+ const bool bUndo = IsUndoEnabled();
+
SdTransferable* pDragTransferable = SD_MOD()->pTransferDrag;
if( pDragTransferable )
@@ -444,7 +449,9 @@ void View::DragFinished( sal_Int8 nDropAction )
!IsPresObjSelected() )
{
mpDragSrcMarkList->ForceSort();
- BegUndo();
+
+ if( bUndo )
+ BegUndo();
ULONG nm, nAnz = mpDragSrcMarkList->GetMarkCount();
@@ -452,7 +459,8 @@ void View::DragFinished( sal_Int8 nDropAction )
{
nm--;
SdrMark* pM=mpDragSrcMarkList->GetMark(nm);
- AddUndo(mpDoc->GetSdrUndoFactory().CreateUndoDeleteObject(*pM->GetMarkedSdrObj()));
+ if( bUndo )
+ AddUndo(mpDoc->GetSdrUndoFactory().CreateUndoDeleteObject(*pM->GetMarkedSdrObj()));
}
mpDragSrcMarkList->GetMark(0)->GetMarkedSdrObj()->GetOrdNum();
@@ -474,13 +482,15 @@ void View::DragFinished( sal_Int8 nDropAction )
}
}
- EndUndo();
+ if( bUndo )
+ EndUndo();
}
if( pDragTransferable )
pDragTransferable->SetInternalMove( FALSE );
- EndUndo();
+ if( bUndo )
+ EndUndo();
mnDragSrcPgNum = SDRPAGE_NOTFOUND;
delete mpDragSrcMarkList;
mpDragSrcMarkList = NULL;
diff --git a/sd/source/ui/view/sdview3.cxx b/sd/source/ui/view/sdview3.cxx
index baf2549acae9..04cebfbdd577 100644
--- a/sd/source/ui/view/sdview3.cxx
+++ b/sd/source/ui/view/sdview3.cxx
@@ -423,9 +423,12 @@ BOOL View::InsertData( const TransferableDataHelper& rDataHelper,
if( pO )
{
// #i11702#
- BegUndo(String(SdResId(STR_MODIFYLAYER)));
- AddUndo(GetModel()->GetSdrUndoFactory().CreateUndoObjectLayerChange(*pO, pO->GetLayer(), (SdrLayerID)nLayer));
- EndUndo();
+ if( IsUndoEnabled() )
+ {
+ BegUndo(String(SdResId(STR_MODIFYLAYER)));
+ AddUndo(GetModel()->GetSdrUndoFactory().CreateUndoObjectLayerChange(*pO, pO->GetLayer(), (SdrLayerID)nLayer));
+ EndUndo();
+ }
pO->SetLayer( (SdrLayerID) nLayer );
}
@@ -504,9 +507,12 @@ BOOL View::InsertData( const TransferableDataHelper& rDataHelper,
pPage->InsertObject(pObj);
- BegUndo(String(SdResId(STR_UNDO_DRAGDROP)));
- AddUndo(GetModel()->GetSdrUndoFactory().CreateUndoNewObject(*pObj));
- EndUndo();
+ if( IsUndoEnabled() )
+ {
+ BegUndo(String(SdResId(STR_UNDO_DRAGDROP)));
+ AddUndo(GetModel()->GetSdrUndoFactory().CreateUndoNewObject(*pObj));
+ EndUndo();
+ }
// #83525#
ImpRememberOrigAndClone* pRem = new ImpRememberOrigAndClone;
@@ -734,14 +740,28 @@ BOOL View::InsertData( const TransferableDataHelper& rDataHelper,
aVec -= aObjRect.TopLeft();
pNewObj->NbcMove( Size( aVec.X(), aVec.Y() ) );
- BegUndo( String( SdResId(STR_UNDO_DRAGDROP ) ) );
+ const bool bUndo = IsUndoEnabled();
+
+ if( bUndo )
+ BegUndo( String( SdResId(STR_UNDO_DRAGDROP ) ) );
pNewObj->NbcSetLayer( pPickObj->GetLayer() );
SdrPage* pWorkPage = GetSdrPageView()->GetPage();
pWorkPage->InsertObject( pNewObj );
- AddUndo( mpDoc->GetSdrUndoFactory().CreateUndoNewObject( *pNewObj ) );
- AddUndo( mpDoc->GetSdrUndoFactory().CreateUndoDeleteObject( *pPickObj2 ) );
+ if( bUndo )
+ {
+ AddUndo( mpDoc->GetSdrUndoFactory().CreateUndoNewObject( *pNewObj ) );
+ AddUndo( mpDoc->GetSdrUndoFactory().CreateUndoDeleteObject( *pPickObj2 ) );
+ }
pWorkPage->RemoveObject( pPickObj2->GetOrdNum() );
- EndUndo();
+
+ if( bUndo )
+ {
+ EndUndo();
+ }
+ else
+ {
+ SdrObject::Free(pPickObj2 );
+ }
bChanged = TRUE;
mnAction = DND_ACTION_COPY;
}
@@ -750,8 +770,12 @@ BOOL View::InsertData( const TransferableDataHelper& rDataHelper,
SfxItemSet aSet( mpDoc->GetPool() );
// set new attributes to object
- BegUndo( String( SdResId( STR_UNDO_DRAGDROP ) ) );
- AddUndo( mpDoc->GetSdrUndoFactory().CreateUndoAttrObject( *pPickObj ) );
+ const bool bUndo = IsUndoEnabled();
+ if( bUndo )
+ {
+ BegUndo( String( SdResId( STR_UNDO_DRAGDROP ) ) );
+ AddUndo( mpDoc->GetSdrUndoFactory().CreateUndoAttrObject( *pPickObj ) );
+ }
aSet.Put( pObj->GetMergedItemSet() );
// Eckenradius soll nicht uebernommen werden.
@@ -771,11 +795,13 @@ BOOL View::InsertData( const TransferableDataHelper& rDataHelper,
aOldSet.Put(pPickObj->GetMergedItemSet());
aNewSet.Put( pObj->GetMergedItemSet() );
- AddUndo( new E3dAttributesUndoAction( *mpDoc, this, (E3dObject*) pPickObj, aNewSet, aOldSet, FALSE ) );
+ if( bUndo )
+ AddUndo( new E3dAttributesUndoAction( *mpDoc, this, (E3dObject*) pPickObj, aNewSet, aOldSet, FALSE ) );
pPickObj->SetMergedItemSetAndBroadcast( aNewSet );
}
- EndUndo();
+ if( bUndo )
+ EndUndo();
bChanged = TRUE;
}
}
@@ -1252,9 +1278,12 @@ BOOL View::InsertData( const TransferableDataHelper& rDataHelper,
*xStm >> aFillData;
- BegUndo( String( SdResId( STR_UNDO_DRAGDROP ) ) );
- AddUndo( GetModel()->GetSdrUndoFactory().CreateUndoAttrObject( *pPickObj ) );
- EndUndo();
+ if( IsUndoEnabled() )
+ {
+ BegUndo( String( SdResId( STR_UNDO_DRAGDROP ) ) );
+ AddUndo( GetModel()->GetSdrUndoFactory().CreateUndoAttrObject( *pPickObj ) );
+ EndUndo();
+ }
XFillAttrSetItem* pSetItem = aFillData.GetXFillAttrSetItem();
SfxItemSet rSet = pSetItem->GetItemSet();
diff --git a/sd/source/ui/view/sdview4.cxx b/sd/source/ui/view/sdview4.cxx
index 12dcaba2899f..1e6842408e67 100644
--- a/sd/source/ui/view/sdview4.cxx
+++ b/sd/source/ui/view/sdview4.cxx
@@ -134,7 +134,9 @@ SdrGrafObj* View::InsertGraphic( const Graphic& rGraphic, sal_Int8& rAction,
pNewGrafObj->SetEmptyPresObj(FALSE);
}
- BegUndo(String(SdResId(STR_UNDO_DRAGDROP)));
+ const bool bUndo = IsUndoEnabled();
+ if( bUndo )
+ BegUndo(String(SdResId(STR_UNDO_DRAGDROP)));
SdPage* pPage = (SdPage*) pPickObj->GetPage();
@@ -142,26 +144,39 @@ SdrGrafObj* View::InsertGraphic( const Graphic& rGraphic, sal_Int8& rAction,
{
// Neues PresObj in die Liste eintragen
pNewGrafObj->SetUserCall(pPickObj->GetUserCall());
- AddUndo( new sd::UndoObjectPresentationKind( *pPickObj ) );
- AddUndo( new sd::UndoObjectPresentationKind( *pNewGrafObj ) );
+ if( bUndo )
+ {
+ AddUndo( new sd::UndoObjectPresentationKind( *pPickObj ) );
+ AddUndo( new sd::UndoObjectPresentationKind( *pNewGrafObj ) );
+ }
pPage->RemovePresObj(pPickObj);
pPage->InsertPresObj(pNewGrafObj, PRESOBJ_GRAPHIC);
+
+ if( !bUndo )
+ {
+ SdrObject::Free( pPickObj );
+ }
}
if (pImageMap)
pNewGrafObj->InsertUserData(new SdIMapInfo(*pImageMap));
ReplaceObjectAtView(pPickObj, *pPV, pNewGrafObj); // maybe ReplaceObjectAtView
- EndUndo();
+
+ if( bUndo )
+ EndUndo();
}
else if (pPickObj->IsClosedObj() && !pPickObj->ISA(SdrOle2Obj))
{
/******************************************************************
* Das Objekt wird mit der Graphik gefuellt
******************************************************************/
- BegUndo(String(SdResId(STR_UNDO_DRAGDROP)));
- AddUndo(GetModel()->GetSdrUndoFactory().CreateUndoAttrObject(*pPickObj));
- EndUndo();
+ if( IsUndoEnabled() )
+ {
+ BegUndo(String(SdResId(STR_UNDO_DRAGDROP)));
+ AddUndo(GetModel()->GetSdrUndoFactory().CreateUndoAttrObject(*pPickObj));
+ EndUndo();
+ }
XOBitmap aXOBitmap( rGraphic.GetBitmap() );
SfxItemSet aSet(mpDocSh->GetPool(), XATTR_FILLSTYLE, XATTR_FILLBITMAP);
@@ -238,14 +253,28 @@ SdrGrafObj* View::InsertGraphic( const Graphic& rGraphic, sal_Int8& rAction,
Point aVec = aPickObjRect.TopLeft() - aObjRect.TopLeft();
pNewGrafObj->NbcMove(Size(aVec.X(), aVec.Y()));
- BegUndo(String(SdResId(STR_UNDO_DRAGDROP)));
+ const bool bUndo = IsUndoEnabled();
+
+ if( bUndo )
+ BegUndo(String(SdResId(STR_UNDO_DRAGDROP)));
pNewGrafObj->NbcSetLayer(pPickObj->GetLayer());
SdrPage* pP = pPV->GetPage();
pP->InsertObject(pNewGrafObj);
- AddUndo(mpDoc->GetSdrUndoFactory().CreateUndoNewObject(*pNewGrafObj));
- AddUndo(mpDoc->GetSdrUndoFactory().CreateUndoDeleteObject(*pPickObj));
+ if( bUndo )
+ {
+ AddUndo(mpDoc->GetSdrUndoFactory().CreateUndoNewObject(*pNewGrafObj));
+ AddUndo(mpDoc->GetSdrUndoFactory().CreateUndoDeleteObject(*pPickObj));
+ }
pP->RemoveObject(pPickObj->GetOrdNum());
- EndUndo();
+
+ if( bUndo )
+ {
+ EndUndo();
+ }
+ else
+ {
+ SdrObject::Free(pPickObj);
+ }
mnAction = DND_ACTION_COPY;
}
else
diff --git a/sd/source/ui/view/viewshe3.cxx b/sd/source/ui/view/viewshe3.cxx
index 046dfab9526e..38e2b6b88001 100644
--- a/sd/source/ui/view/viewshe3.cxx
+++ b/sd/source/ui/view/viewshe3.cxx
@@ -324,7 +324,9 @@ SdPage* ViewShell::CreateOrDuplicatePage (
// 2. Create a new page or duplicate an existing one.
View* pDrView = GetView();
- pDrView->BegUndo( String( SdResId(STR_INSERTPAGE) ) );
+ const bool bUndo = pDrView && pDrView->IsUndoEnabled();
+ if( bUndo )
+ pDrView->BegUndo( String( SdResId(STR_INSERTPAGE) ) );
USHORT nNewPageIndex = 0xffff;
switch (nSId)
@@ -403,13 +405,18 @@ SdPage* ViewShell::CreateOrDuplicatePage (
}
SdPage* pNewPage = 0;
if(nNewPageIndex != 0xffff)
- {
pNewPage = pDocument->GetSdPage(nNewPageIndex, PK_STANDARD);
- pDrView->AddUndo(pDocument->GetSdrUndoFactory().CreateUndoNewPage(*pNewPage));
- pDrView->AddUndo(pDocument->GetSdrUndoFactory().CreateUndoNewPage(*pDocument->GetSdPage (nNewPageIndex, PK_NOTES)));
- }
- pDrView->EndUndo();
+ if( bUndo )
+ {
+ if( pNewPage )
+ {
+ pDrView->AddUndo(pDocument->GetSdrUndoFactory().CreateUndoNewPage(*pNewPage));
+ pDrView->AddUndo(pDocument->GetSdrUndoFactory().CreateUndoNewPage(*pDocument->GetSdPage (nNewPageIndex, PK_NOTES)));
+ }
+
+ pDrView->EndUndo();
+ }
return pNewPage;
}