Merge branch 'blender2.7'
[blender.git] / source / blender / blenlib / BLI_callbacks.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  */
16
17 /** \file
18  * \ingroup bli
19  */
20
21 #ifndef __BLI_CALLBACKS_H__
22 #define __BLI_CALLBACKS_H__
23
24 struct ID;
25 struct Main;
26
27 /**
28  * Common suffix uses:
29  * - ``_PRE/_POST``:
30  *   For handling discrete non-interactive events.
31  * - ``_INIT/_COMPLETE/_CANCEL``:
32  *   For handling jobs (which may in turn cause other handlers to be called).
33  */
34 typedef enum {
35         BLI_CB_EVT_FRAME_CHANGE_PRE,
36         BLI_CB_EVT_FRAME_CHANGE_POST,
37         BLI_CB_EVT_RENDER_PRE,
38         BLI_CB_EVT_RENDER_POST,
39         BLI_CB_EVT_RENDER_WRITE,
40         BLI_CB_EVT_RENDER_STATS,
41         BLI_CB_EVT_RENDER_INIT,
42         BLI_CB_EVT_RENDER_COMPLETE,
43         BLI_CB_EVT_RENDER_CANCEL,
44         BLI_CB_EVT_LOAD_PRE,
45         BLI_CB_EVT_LOAD_POST,
46         BLI_CB_EVT_SAVE_PRE,
47         BLI_CB_EVT_SAVE_POST,
48         BLI_CB_EVT_UNDO_PRE,
49         BLI_CB_EVT_UNDO_POST,
50         BLI_CB_EVT_REDO_PRE,
51         BLI_CB_EVT_REDO_POST,
52         BLI_CB_EVT_DEPSGRAPH_UPDATE_PRE,
53         BLI_CB_EVT_DEPSGRAPH_UPDATE_POST,
54         BLI_CB_EVT_VERSION_UPDATE,
55         BLI_CB_EVT_LOAD_FACTORY_STARTUP_POST,
56         BLI_CB_EVT_TOT
57 } eCbEvent;
58
59
60 typedef struct bCallbackFuncStore {
61         struct bCallbackFuncStore *next, *prev;
62         void (*func)(struct Main *, struct ID *, void *arg);
63         void *arg;
64         short alloc;
65 } bCallbackFuncStore;
66
67
68 void BLI_callback_exec(struct Main *bmain, struct ID *self, eCbEvent evt);
69 void BLI_callback_add(bCallbackFuncStore *funcstore, eCbEvent evt);
70
71 void BLI_callback_global_init(void);
72 void BLI_callback_global_finalize(void);
73
74 #endif /* __BLI_CALLBACKS_H__ */