SdrModel: make sure undo/redo stacks are not empty
most probably Undo() does not get called if there is no undo actions, just to be on the safe side. Change-Id: I3597698dbe8208916be94ebddd7260fbd7eadc74
This commit is contained in:
@@ -575,13 +575,9 @@ public:
|
||||
void SetMaxUndoActionCount(sal_uIntPtr nAnz);
|
||||
sal_uIntPtr GetMaxUndoActionCount() const { return nMaxUndoCount; }
|
||||
void ClearUndoBuffer();
|
||||
// UndoAction(0) ist die aktuelle (also die zuletzt eingegangene)
|
||||
sal_uIntPtr GetUndoActionCount() const { return pUndoStack!=NULL ? pUndoStack->size() : 0; }
|
||||
const SfxUndoAction* GetUndoAction(sal_uIntPtr nNum) const { return (SfxUndoAction*)(pUndoStack!=NULL ? (*pUndoStack)[nNum] : NULL); }
|
||||
// RedoAction(0) ist die aktuelle (also die des letzten Undo)
|
||||
sal_uIntPtr GetRedoActionCount() const { return pRedoStack!=NULL ? pRedoStack->size() : 0; }
|
||||
const SfxUndoAction* GetRedoAction(sal_uIntPtr nNum) const { return (SfxUndoAction*)(pRedoStack!=NULL ? (*pRedoStack)[nNum] : NULL); }
|
||||
|
||||
bool HasUndoActions() const;
|
||||
bool HasRedoActions() const;
|
||||
bool Undo();
|
||||
bool Redo();
|
||||
bool Repeat(SfxRepeatTarget&);
|
||||
|
@@ -791,8 +791,8 @@ IMPL_LINK( SvxIMapDlg, StateHdl, IMapWindow*, pWnd )
|
||||
aTbxIMapDlg1.EnableItem( TBI_POLYDELETE, !bDrawEnabled && pView->IsDeleteMarkedPointsPossible() );
|
||||
|
||||
// Undo/Redo
|
||||
aTbxIMapDlg1.EnableItem( TBI_UNDO, pModel->GetUndoActionCount() > 0 );
|
||||
aTbxIMapDlg1.EnableItem( TBI_REDO, pModel->GetRedoActionCount() > 0 );
|
||||
aTbxIMapDlg1.EnableItem( TBI_UNDO, pModel->HasUndoActions() );
|
||||
aTbxIMapDlg1.EnableItem( TBI_REDO, pModel->HasRedoActions() );
|
||||
|
||||
if ( bPolyEdit )
|
||||
{
|
||||
|
@@ -431,6 +431,16 @@ void SdrModel::ClearUndoBuffer()
|
||||
}
|
||||
}
|
||||
|
||||
bool SdrModel::HasUndoActions() const
|
||||
{
|
||||
return pUndoStack && !pUndoStack->empty();
|
||||
}
|
||||
|
||||
bool SdrModel::HasRedoActions() const
|
||||
{
|
||||
return pRedoStack && !pRedoStack->empty();
|
||||
}
|
||||
|
||||
bool SdrModel::Undo()
|
||||
{
|
||||
bool bRet = false;
|
||||
@@ -440,7 +450,7 @@ bool SdrModel::Undo()
|
||||
}
|
||||
else
|
||||
{
|
||||
SfxUndoAction* pDo=(SfxUndoAction*)GetUndoAction(0);
|
||||
SfxUndoAction* pDo = HasUndoActions() ? pUndoStack->front() : NULL;
|
||||
if(pDo!=NULL)
|
||||
{
|
||||
const bool bWasUndoEnabled = mbUndoEnabled;
|
||||
@@ -466,7 +476,7 @@ bool SdrModel::Redo()
|
||||
}
|
||||
else
|
||||
{
|
||||
SfxUndoAction* pDo=(SfxUndoAction*)GetRedoAction(0);
|
||||
SfxUndoAction* pDo = HasRedoActions() ? pRedoStack->front() : NULL;
|
||||
if(pDo!=NULL)
|
||||
{
|
||||
const bool bWasUndoEnabled = mbUndoEnabled;
|
||||
@@ -492,7 +502,7 @@ bool SdrModel::Repeat(SfxRepeatTarget& rView)
|
||||
}
|
||||
else
|
||||
{
|
||||
SfxUndoAction* pDo=(SfxUndoAction*)GetUndoAction(0);
|
||||
SfxUndoAction* pDo = HasUndoActions() ? pUndoStack->front() : NULL;
|
||||
if(pDo!=NULL)
|
||||
{
|
||||
if(pDo->CanRepeat(rView))
|
||||
|
Reference in New Issue
Block a user