1 /*
2  * File:         undo.h
3  *
4  * Description:  header for undo.c
5  *
6  *
7  * This source code is part of kludge3d, and is released under the
8  * GNU General Public License.
9  *
10  *
11  */
12 
13 #ifndef UNDO_H
14 #define UNDO_H
15 
16 #include <glib.h>
17 
18 #include "geo.h"
19 #include "model.h"
20 
21 /*
22 							objects			object	mesh	fargs		iargs	misc
23 ACTION_VERTEX_SEL			list			-		-		-			-		-
24 ACTION_VERTEX_UNSEL			list			-		-		-			-		-
25 ACTION_VERTEX_MOVE			list, NULL==sel	-		-		delta[3]	-		-
26 ACTION_VERTEX_ROT			list, NULL==sel	-		-		0,0,0,angle	axis	-
27 ACTION_VERTEX_SCALE			list, NULL==sel	-		-		factor[3],center[3]	-		-
28 ACTION_VERTEX_ADD_TO_MODEL	-				vert	-		-			-		-
29 ACTION_VERTEX_REMOVE_MODEL	-				vert	-		-			-		-
30 ACTION_VERTEX_ADD_TO_MESH	-				vert	mesh	-			-		-
31 ACTION_VERTEX_REMOVE_MESH	-				vert	mesh	-			-		-
32 ACTION_VERTEX_ADD_TO_POLY	-				vert	-		-			-		poly
33 ACTION_VERTEX_REMOVE_POLY	-				vert	-		-			v_idx	poly
34 ACTION_VERTEX_SWITCH_POLY	-				vert	-		-			v_idx	poly
35 
36 ACTION_POLY_SEL				list			-		-		-			-		-
37 ACTION_POLY_UNSEL			list			-		-		-			-		-
38 ACTION_POLY_ADD_TO_MESH		-				poly	mesh	-			-		-
39 ACTION_POLY_REMOVE_MESH		-				poly	mesh	-			-		-
40 ACTION_POLY_REVERSE_WINDING	-				poly	-		-			-		-
41 */
42 
43 typedef enum {
44 	ACTION_UNKNOWN,
45 
46 	ACTION_VERTEX_SEL,
47 	ACTION_VERTEX_UNSEL,
48 	ACTION_VERTEX_MOVE,
49 	ACTION_VERTEX_ROT,
50 	ACTION_VERTEX_SCALE,
51 	ACTION_VERTEX_ADD_TO_MODEL,
52 	ACTION_VERTEX_REMOVE_MODEL,
53 	ACTION_VERTEX_ADD_TO_MESH,
54 	ACTION_VERTEX_REMOVE_MESH,
55 	ACTION_VERTEX_ADD_TO_POLY,
56 	ACTION_VERTEX_REMOVE_POLY,
57 	ACTION_VERTEX_SWITCH_POLY,
58 
59 	ACTION_POLY_SEL,
60 	ACTION_POLY_UNSEL,
61 	ACTION_POLY_ADD_TO_MESH,
62 	ACTION_POLY_REMOVE_MESH,
63 	ACTION_POLY_REVERSE_WINDING,
64 
65 	ACTION_MESH_ADD,
66 	ACTION_MESH_DEL,
67 	ACTION_MESH_EDIT,
68 
69 	ACTION_MAX,  /* don't add anything below here */
70 	ACTION_MARKER /* denotes the end-of-input */
71 } ActionType;
72 
73 
74 typedef struct _Action Action;
75 struct _Action {
76 ActionType type;
77 
78 GSList *objects;
79 void *object;
80 Mesh *mesh;
81 
82 float *fargs;
83 int *iargs;
84 
85 void *misc;
86 };
87 
88 
89 void undo_init( void ) ;
90 
91 void undo_enable( Model *model ) ;
92 void undo_disable( Model *model ) ;
93 void action_clear_stack( Model *model ) ;
94 void action_do( Model *model, ActionType type, GSList *objects, void *object,
95 				Mesh *mesh, float *fargs, int *iargs, void *misc );
96 void action_undo( Model *model );
97 
98 #endif
99