Initial revision
[blender.git] / intern / action / ACT_Action.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        March 31, 2001
38  */
39
40 #ifndef _H_ACT_ACTION_H_
41 #define _H_ACT_ACTION_H_
42
43 #include "MEM_RefCounted.h"
44 #include "STR_String.h"
45
46 /**
47  * An action that can be applied or undone.
48  * Virtual base class for actions with a name.
49  * An action object inherits the shared object reference count mechanism.
50  * @author      Maarten Gribnau
51  * @date        March 31, 2001
52  */
53
54 class ACT_Action : public MEM_RefCounted {
55 public:
56         /**
57          * Constructs an action with the given name .
58          * @param       name    the name of the action.
59          * @param       applied state of the action after creation.
60          */
61         ACT_Action(const STR_String& name, bool applied = false);
62
63         /** 
64          * Returns the name of the action.
65          * @param       name    the name of the action.
66          */
67         inline virtual void getName(STR_String& name) const;
68
69         /** 
70          * Returns the name of the action as a pointer to the data of the string.
71          * @return      pointer to the name of the action.
72          */
73         inline virtual char* getName();
74
75         /** 
76          * Sets the name of the action.
77          * @param       name    the name of the action.
78          */
79         inline virtual void setName(const STR_String& name);
80
81         /** 
82          * Returns whether this action is applied.
83          * @return whether this action is applied.
84          */
85         inline virtual bool getIsApplied() const;
86
87
88         /**
89          * Call this member to apply an action.
90          * Child classes should override the doApply member to implement apply functionality.
91          * @see doApply.
92          */
93         virtual void apply();
94
95         /**
96          * Call this member to undo an action .
97          * Child classes should override the doUndo member to implement undo functionality.
98          * @see doApply()
99          */
100         virtual void undo();
101
102 protected:
103         /**
104          * Implementations should overload this method to provide the apply functionality.
105          */
106         virtual void doApply() = 0;
107
108         /**
109          * Implementations should overload this method to provide the undo functionality.
110          */
111         virtual void doUndo() = 0;
112
113         /** Name of this action */
114         STR_String m_name;
115         /** Is this action already applied? */
116         bool m_applied;
117 };
118
119
120 void ACT_Action::getName(STR_String& name) const
121 {
122         name = m_name;
123 }
124
125 char* ACT_Action::getName()
126 {
127         return m_name.Ptr();
128 }
129
130 void ACT_Action::setName(const STR_String& name)
131 {
132         m_name = name;
133 }
134
135 inline bool ACT_Action::getIsApplied() const
136 {
137         return m_applied;
138 }
139
140 #endif // _H_ACT_ACTION_H_