Cadabra Computer algebra system for field theory problems

## Description

All actions derive from the ActionBase object, which defines the interface they need to implement. These objects are used to pass (user) action instructions around. They can be stored in undo/redo stacks. All actions run on the GUI thread. The update_gui members typically call members of the GUIBase class. Action objects are allowed to modify the DTree document doc, since they essentially contain code which is part of the DocumentThread object.

All modifications to the document are done by calling 'perform' with an action object. This enables us to implement an undo stack. This method will take care of making the actual change to the DTree document, and call back on the 'change' methods above to inform the derived class that a change has been made.

#include <Actions.hh>

## Public Member Functions

ActionBase (DataCell::id_t ref_id)

virtual void execute (DocumentThread &, GUIBase &)
Perform the action. More...

virtual void revert (DocumentThread &, GUIBase &)=0
Revert the change to the DTree document and the GUI. More...

virtual bool undoable () const
Can this action be undone? More...

## Public Attributes

DataCell::id_t ref_id

## Protected Attributes

DTree::iterator ref

## ◆ ActionBase()

 ActionBase::ActionBase ( DataCell::id_t ref_id )

## ◆ execute()

 void ActionBase::execute ( DocumentThread & cl, GUIBase & )
virtual

Perform the action.

This should update both the document tree data structure and the GUI. The latter is updated by calling relevant methods on the GUIBase object passed in.

## ◆ revert()

pure virtual

Revert the change to the DTree document and the GUI.

## ◆ undoable()

 bool ActionBase::undoable ( ) const
virtual

Can this action be undone?