Laxkit  0.0.7.1
undo.h
1 //
2 //
3 // The Laxkit, a windowing toolkit
4 // Please consult http://laxkit.sourceforge.net about where to send any
5 // correspondence about this software.
6 //
7 // This library is free software; you can redistribute it and/or
8 // modify it under the terms of the GNU Library General Public
9 // License as published by the Free Software Foundation; either
10 // version 2 of the License, or (at your option) any later version.
11 //
12 // This library is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 // Library General Public License for more details.
16 //
17 // You should have received a copy of the GNU Library General Public
18 // License along with this library; if not, write to the Free Software
19 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 //
21 // Copyright (C) 2012 by Tom Lechner
22 //
23 #ifndef _LAX_UNDO_H
24 #define _LAX_UNDO_H
25 
26 
27 #include <lax/anobject.h>
28 #include <cstdlib>
29 
30 namespace Laxkit {
31 
32 class UndoData;
33 
34 //--------------------------------------------- Undoable ------------------------------------------
35 class Undoable
36 {
37  public:
38  virtual int Undo(UndoData *data) = 0;
39  virtual int Redo(UndoData *data) = 0;
40 };
41 
42 
43 //--------------------------------------------- UndoData ------------------------------------------
44 class UndoData
45 {
46  public:
47  Undoable *context;
48  anObject *data;
49  clock_t time;
50  int direction;
51  int isauto;
52  UndoData *prev, *next;
53 
54  UndoData();
55  virtual ~UndoData();
56  virtual int isUndoable();
57  virtual int isRedoable();
58  virtual const char *Description() = 0;
59 };
60 
61 //--------------------------------------------- UndoManager ------------------------------------------
63 {
64  protected:
65  UndoData *head;
66  UndoData *current; //points to either the current undoable, or NULL. There may be redoable ones in head!
67  public:
68  UndoManager();
69  virtual ~UndoManager();
70  virtual int AddUndo(UndoData *data);
71 
72  virtual int Undo();
73  virtual int Redo();
74 };
75 
76 
77 
78 //--------------------------------------------- Default UndoManager ------------------------------------------
79 UndoManager *GetUndoManager();
81 
82 
83 } //namespace Laxkit
84 
85 
86 #endif
87 

Mon Feb 17 2014 11:52:57, Laxkit