1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
/**********************************************************************
Audacity: A Digital Audio Editor
UndoManager.h
Dominic Mazzoni
After each operation, call UndoManager's PushState, pass it
the entire track hierarchy. The UndoManager makes a duplicate
of every single track using its Duplicate method, which should
increment reference counts. If we were not at the top of
the stack when this is called, delete above first.
Undo() temporarily moves down one state and returns the track
hierarchy. If another PushState is called, the redo information
is lost.
Redo()
UndoAvailable()
RedoAvailable()
**********************************************************************/
#ifndef __AUDACITY_UNDOMANAGER__
#define __AUDACITY_UNDOMANAGER__
#include <wx/dynarray.h>
#include <wx/string.h>
class VTrack;
class TrackList;
struct UndoStackElem {
TrackList *tracks;
double sel0;
double sel1;
};
WX_DEFINE_ARRAY(UndoStackElem *, UndoStack);
class UndoManager {
public:
UndoManager();
~UndoManager();
void PushState(TrackList * l, double sel0, double sel1);
void ClearStates();
TrackList *Undo(double *sel0, double *sel1);
TrackList *Redo(double *sel0, double *sel1);
bool UndoAvailable();
bool RedoAvailable();
void Debug();
private:
int current;
UndoStack stack;
};
#endif
|