1/*
2 * Copyright 2006, Haiku.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Stephan Aßmus <superstippi@gmx.de>
7 */
8
9#ifndef COMMAND_STACK_H
10#define COMMAND_STACK_H
11
12#include <stack>
13
14#include <Locker.h>
15
16#include "Observable.h"
17
18class BString;
19class Command;
20
21class CommandStack : public BLocker,
22					 public Observable {
23 public:
24								CommandStack();
25	virtual						~CommandStack();
26
27			status_t			Perform(Command* command);
28
29			status_t			Undo();
30			status_t			Redo();
31
32			bool				GetUndoName(BString& name);
33			bool				GetRedoName(BString& name);
34
35			void				Clear();
36			void				Save();
37			bool				IsSaved();
38
39 private:
40			status_t			_AddCommand(Command* command);
41
42	typedef std::stack<Command*> command_stack;
43
44			command_stack			fUndoHistory;
45			command_stack			fRedoHistory;
46			Command*				fSavedCommand;
47};
48
49#endif // COMMAND_STACK_H
50