1/*
2 * Copyright 2008-2010, Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Michael Pfeiffer <laplace@users.sourceforge.net>
7 */
8#ifndef WIZARD_CONTROLLER_H
9#define WIZARD_CONTROLLER_H
10
11
12#include <SupportDefs.h>
13
14
15class WizardView;
16class WizardPageView;
17
18
19class WizardController {
20public:
21								WizardController();
22	virtual						~WizardController();
23
24	virtual	void				Initialize(WizardView* wizard);
25	virtual	void				Next(WizardView* wizard);
26	virtual	void				Previous(WizardView* wizard);
27
28protected:
29	virtual	int32				InitialState() = 0;
30	virtual	int32				NextState(int32 state) = 0;
31	virtual	WizardPageView*		CreatePage(int32 state, WizardView* wizard) = 0;
32
33			int32				CurrentState() const;
34
35private:
36	class StateStack {
37	public:
38		StateStack(int32 state, StateStack* next)
39			:
40			fState(state),
41			fNext(next)
42		{
43		}
44
45		int32 State()
46		{
47			return fState;
48		}
49
50		StateStack* Next()
51		{
52			return fNext;
53		}
54
55		void MakeEmpty();
56
57	private:
58		int32 fState;
59		StateStack* fNext;
60	};
61
62			void				_PushState(int32 state);
63			void				_ShowPage(WizardView* wizard);
64
65private:
66			StateStack*			fStack;
67};
68
69
70#endif	// WIZARD_CONTROLLER_H
71