Trying to get the bullet re-org to work with Makefiles.
[blender-staging.git] / intern / action / intern / ACT_CallbackAction.h
1 /**
2  * $Id$
3  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version. The Blender
9  * Foundation also sells licenses for use in proprietary software under
10  * the Blender License.  See http://www.blender.org/BL/ for information
11  * about this.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software Foundation,
20  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21  *
22  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
23  * All rights reserved.
24  *
25  * The Original Code is: all of this file.
26  *
27  * Contributor(s): none yet.
28  *
29  * ***** END GPL/BL DUAL LICENSE BLOCK *****
30  */
31
32 /**
33
34  * $Id$
35  * Copyright (C) 2001 NaN Technologies B.V.
36  * @author      Maarten Gribnau
37  * @date        June 17, 2001
38  */
39
40 #ifndef _H_ACT_CALLBACK_ACTION_H
41 #define _H_ACT_CALLBACK_ACTION_H
42
43 #include "ACT_Action.h"
44 #include "ACT_ActionC-Api.h"
45
46
47 /**
48  * An action implementation that uses callbacks for undo and redo.
49  * @author      Maarten Gribnau
50  * @date        June 17, 2001
51  */
52
53 class ACT_CallbackAction : public ACT_Action {
54 public:
55         /**
56          * Constructs an action with the given name .
57          * @param       name            The name of the action.
58          * @param       applied         State of the action after creation.
59          * @param       data            Pointer to user data passed to the callbacks.
60          * @param       applyProc       Callback invoked for apply action.
61          * @param       undoProc        Callback invoked for undo action.
62          */
63         ACT_CallbackAction(
64                 STR_String& name,
65                 bool applied,
66                 ACT_ActionUserDataPtr data,
67                 ACT_ActionApplyProcPtr applyProc,
68                 ACT_ActionUndoProcPtr undoProc,
69                 ACT_ActionDisposeProcPtr disposeProc)
70                 : ACT_Action(name, applied), m_userData(data), m_applyProc(applyProc), m_undoProc(undoProc), m_disposeProc(disposeProc)
71         {
72         }
73
74         /**
75          * Default destructor.
76          * Will call the dispose callback.
77          */
78         virtual ~ACT_CallbackAction()
79         {
80                 // Should assert
81                 m_disposeProc((ACT_ActionPtr)this, m_userData);
82         }
83
84
85 protected:
86         /**
87          * Calls the appropriate callback.
88          */
89         inline virtual void doApply();
90
91         /**
92          * Calls the appropriate callback.
93          */
94         inline virtual void doUndo();
95
96         /** User data supplied at creation and passed to the callbacks. */
97         ACT_ActionUserDataPtr m_userData;
98
99         /** Callback invoked for apply action. */
100         ACT_ActionApplyProcPtr m_applyProc;
101
102         /** Callback invoked for undo action. */
103         ACT_ActionApplyProcPtr m_undoProc;
104
105         /** Callback invoked when the action is disposed. */
106         ACT_ActionDisposeProcPtr m_disposeProc;
107 };
108
109
110 inline void ACT_CallbackAction::doApply()
111 {
112         // Should assert
113         m_applyProc((ACT_ActionPtr)this, m_userData);
114 }
115
116
117 inline void ACT_CallbackAction::doUndo()
118 {
119         // Should assert
120         m_undoProc((ACT_ActionPtr)this, m_userData);
121 }
122
123
124 #endif // _H_ACT_CALLBACK_ACTION_H
125