Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes

mitk::LimitedLinearUndo Class Reference

A linear undo model with one undo and one redo stack. More...

#include <mitkLimitedLinearUndo.h>

Inheritance diagram for mitk::LimitedLinearUndo:
Inheritance graph
[legend]
Collaboration diagram for mitk::LimitedLinearUndo:
Collaboration graph
[legend]

List of all members.

Public Types

typedef std::vector
< UndoStackItem * > 
UndoContainer
typedef std::vector
< UndoStackItem * >
::reverse_iterator 
UndoContainerRevIter

Public Member Functions

 mitkClassMacro (LimitedLinearUndo, UndoModel)
virtual bool SetOperationEvent (UndoStackItem *stackItem)
virtual bool Undo ()
 Undoes the last changes.
virtual bool Undo (bool)
virtual bool Undo (int oeid)
 Undoes all changes until ObjectEventID oeid.
virtual bool Redo ()
 Undoes the last changes.
virtual bool Redo (bool)
virtual bool Redo (int oeid)
 Redoes all changes until ObjectEventID oeid.
virtual void Clear ()
 Clears UndoList and RedoList.
virtual void ClearRedoList ()
 Clears the RedoList.
virtual bool RedoListEmpty ()
 True, if RedoList is empty.
virtual int GetLastObjectEventIdInList ()
 Returns the ObjectEventId of the top element in the OperationHistory.
virtual int GetLastGroupEventIdInList ()
 Returns the GroupEventId of the top element in the OperationHistory.
virtual OperationEventGetLastOfType (OperationActor *destination, OperationType opType)
 Returns the last specified OperationEvent in Undo-list corresponding to the given values; if nothing found, then returns NULL.

Static Public Member Functions

static Pointer New ()

Protected Member Functions

 LimitedLinearUndo ()
virtual ~LimitedLinearUndo ()
void ClearList (UndoContainer *list)

Protected Attributes

UndoContainer m_UndoList
UndoContainer m_RedoList

Detailed Description

A linear undo model with one undo and one redo stack.

Derived from UndoModel AND itk::Object. Invokes ITK-events to signal listening GUI elements, whether each of the stacks is empty or not (to enable/disable button, ...)

Definition at line 38 of file mitkLimitedLinearUndo.h.


Member Typedef Documentation

Definition at line 41 of file mitkLimitedLinearUndo.h.

typedef std::vector<UndoStackItem*>::reverse_iterator mitk::LimitedLinearUndo::UndoContainerRevIter

Definition at line 42 of file mitkLimitedLinearUndo.h.


Constructor & Destructor Documentation

mitk::LimitedLinearUndo::LimitedLinearUndo (  ) [protected]

Constructor

Definition at line 22 of file mitkLimitedLinearUndo.cpp.

{
  // nothing to do
}
mitk::LimitedLinearUndo::~LimitedLinearUndo (  ) [protected, virtual]

Destructor

Definition at line 27 of file mitkLimitedLinearUndo.cpp.

{
  //delete undo and redo list
  this->ClearList(&m_UndoList);
  this->ClearList(&m_RedoList);
}

Member Function Documentation

void mitk::LimitedLinearUndo::Clear (  ) [virtual]

Clears UndoList and RedoList.

Implements mitk::UndoModel.

Definition at line 149 of file mitkLimitedLinearUndo.cpp.

{
  this->ClearList(&m_UndoList);
  InvokeEvent( UndoEmptyEvent() );

  this->ClearList(&m_RedoList);
  InvokeEvent( RedoEmptyEvent() );
}
void mitk::LimitedLinearUndo::ClearList ( UndoContainer list ) [protected]

Definition at line 34 of file mitkLimitedLinearUndo.cpp.

{
  while(!list->empty())
  {
    UndoStackItem* item = list->back();
    list->pop_back();
    delete item;
  }
}
void mitk::LimitedLinearUndo::ClearRedoList (  ) [virtual]

Clears the RedoList.

Implements mitk::UndoModel.

Definition at line 158 of file mitkLimitedLinearUndo.cpp.

{
  this->ClearList(&m_RedoList);
  InvokeEvent( RedoEmptyEvent() );
}
int mitk::LimitedLinearUndo::GetLastGroupEventIdInList (  ) [virtual]

Returns the GroupEventId of the top element in the OperationHistory.

Implements mitk::UndoModel.

Definition at line 174 of file mitkLimitedLinearUndo.cpp.

{
  return m_UndoList.back()->GetGroupEventId();
}
int mitk::LimitedLinearUndo::GetLastObjectEventIdInList (  ) [virtual]

Returns the ObjectEventId of the top element in the OperationHistory.

Implements mitk::UndoModel.

Definition at line 169 of file mitkLimitedLinearUndo.cpp.

{
  return m_UndoList.back()->GetObjectEventId();
}
mitk::OperationEvent * mitk::LimitedLinearUndo::GetLastOfType ( OperationActor destination,
OperationType  opType 
) [virtual]

Returns the last specified OperationEvent in Undo-list corresponding to the given values; if nothing found, then returns NULL.

Implements mitk::UndoModel.

Definition at line 179 of file mitkLimitedLinearUndo.cpp.

References mitk::OperationEvent::GetDestination(), mitk::OperationEvent::GetOperation(), mitk::Operation::GetOperationType(), and mitk::OperationEvent::IsValid().

{
  // When/where is this function needed? In CoordinateSupplier...
  for ( UndoContainerRevIter iter = m_UndoList.rbegin(); iter != m_UndoList.rend(); ++iter )
  {
    OperationEvent* opEvent = dynamic_cast<OperationEvent*>(*iter);
    if (!opEvent) continue;

    if (   opEvent->GetOperation() != NULL
        && opEvent->GetOperation()->GetOperationType() == opType
        && opEvent->IsValid()
        && opEvent->GetDestination() == destination ) 
      return opEvent;
  }

  return NULL;
}
mitk::LimitedLinearUndo::mitkClassMacro ( LimitedLinearUndo  ,
UndoModel   
)
static Pointer mitk::LimitedLinearUndo::New (  ) [static]
bool mitk::LimitedLinearUndo::Redo ( bool   ) [virtual]

Implements mitk::UndoModel.

Definition at line 111 of file mitkLimitedLinearUndo.cpp.

{
  return Redo();
}
bool mitk::LimitedLinearUndo::Redo ( int  oeid ) [virtual]

Redoes all changes until ObjectEventID oeid.

Definition at line 124 of file mitkLimitedLinearUndo.cpp.

References mitk::RenderingManager::GetInstance(), and mitk::RenderingManager::RequestUpdateAll().

{
  if (m_RedoList.empty()) return false;

  do
  {
    m_RedoList.back()->ReverseAndExecute();
      
    m_UndoList.push_back(m_RedoList.back());
    m_RedoList.pop_back();
    InvokeEvent( UndoNotEmptyEvent() );

    if (m_RedoList.empty()) 
    {
      InvokeEvent( RedoEmptyEvent() );
      break;
    }
  } 
  while ( m_RedoList.back()->GetObjectEventId() <= oeid );
  
  //Update. This should belong into the ExecuteOperation() of OperationActors, but it seems not to be used everywhere
  mitk::RenderingManager::GetInstance()->RequestUpdateAll();
  return true;
}
bool mitk::LimitedLinearUndo::Redo (  ) [virtual]

Undoes the last changes.

Reads the top element of the Redo-Stack, executes the operation, swaps the OperationEvent-Operation with the Undo-Operation and sets it to Undo-Stack

Implements mitk::UndoModel.

Definition at line 116 of file mitkLimitedLinearUndo.cpp.

{
  if (m_RedoList.empty()) return false;

  int redoObjectEventId = m_RedoList.back()->GetObjectEventId();
  return Redo( redoObjectEventId );
}
bool mitk::LimitedLinearUndo::RedoListEmpty (  ) [virtual]

True, if RedoList is empty.

Implements mitk::UndoModel.

Definition at line 164 of file mitkLimitedLinearUndo.cpp.

{
  return m_RedoList.empty();
}
bool mitk::LimitedLinearUndo::SetOperationEvent ( UndoStackItem stackItem ) [virtual]

Implements mitk::UndoModel.

Reimplemented in mitk::VerboseLimitedLinearUndo.

Definition at line 44 of file mitkLimitedLinearUndo.cpp.

{
  OperationEvent* operationEvent = dynamic_cast<OperationEvent*>(stackItem); 
  if (!operationEvent) return false;
  
  // clear the redolist, if a new operation is saved
  if (!m_RedoList.empty())
  {
    this->ClearList(&m_RedoList);
    InvokeEvent( RedoEmptyEvent() );
  }
    
  m_UndoList.push_back(operationEvent);
  
  InvokeEvent( UndoNotEmptyEvent() );
  
  return true;
}
bool mitk::LimitedLinearUndo::Undo ( bool  fine ) [virtual]

Implements mitk::UndoModel.

Definition at line 63 of file mitkLimitedLinearUndo.cpp.

{
  if (fine)
  {
    // undo one object event ID
    return Undo();
  }
  else
  { 
    // undo one group event ID
    int oeid = FirstObjectEventIdOfCurrentGroup(m_UndoList); // get the Object Event ID of the first item with a differnt Group ID (as seen from the end of stack)
    return Undo(oeid);
  }
}
bool mitk::LimitedLinearUndo::Undo ( int  oeid ) [virtual]

Undoes all changes until ObjectEventID oeid.

Definition at line 86 of file mitkLimitedLinearUndo.cpp.

References mitk::RenderingManager::GetInstance(), and mitk::RenderingManager::RequestUpdateAll().

{
  if(m_UndoList.empty()) return false;

  do
  {
    m_UndoList.back()->ReverseAndExecute();
    
    m_RedoList.push_back(m_UndoList.back());  // move to redo stack
    m_UndoList.pop_back();
    InvokeEvent( RedoNotEmptyEvent() );

    if (m_UndoList.empty()) 
    {
      InvokeEvent( UndoEmptyEvent() );
      return false;
    }
  } 
  while ( m_UndoList.back()->GetObjectEventId() >= oeid );

  //Update. Check Rendering Mechanism where to request updates
  mitk::RenderingManager::GetInstance()->RequestUpdateAll();
  return true;
}
bool mitk::LimitedLinearUndo::Undo (  ) [virtual]

Undoes the last changes.

Reads the top element of the Undo-Stack, executes the operation, swaps the OperationEvent-Undo with the Operation and sets it to Redo-Stack

Implements mitk::UndoModel.

Definition at line 78 of file mitkLimitedLinearUndo.cpp.

{
  if(m_UndoList.empty()) return false;

  int undoObjectEventId = m_UndoList.back()->GetObjectEventId();
  return Undo( undoObjectEventId );
}

Member Data Documentation

Definition at line 119 of file mitkLimitedLinearUndo.h.

Definition at line 117 of file mitkLimitedLinearUndo.h.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines