Blender V2.61 - r43446

callbacks.c

Go to the documentation of this file.
00001 /*
00002  * ***** BEGIN GPL LICENSE BLOCK *****
00003  *
00004  * This program is free software; you can redistribute it and/or
00005  * modify it under the terms of the GNU General Public License
00006  * as published by the Free Software Foundation; either version 2
00007  * of the License, or (at your option) any later version.
00008  *
00009  * This program is distributed in the hope that it will be useful,
00010  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012  * GNU General Public License for more details.
00013  *
00014  * You should have received a copy of the GNU General Public License
00015  * along with this program; if not, write to the Free Software Foundation,
00016  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
00017  *
00018  * Contributor(s): Blender Foundation (2011)
00019  *
00020  * ***** END GPL LICENSE BLOCK *****
00021  */
00022 
00023 #include "BLI_utildefines.h"
00024 #include "BLI_listbase.h"
00025 #include "BLI_callbacks.h"
00026 
00027 #include "MEM_guardedalloc.h"
00028 
00029 static ListBase callback_slots[BLI_CB_EVT_TOT]= {{NULL}};
00030 
00031 void BLI_exec_cb(struct Main *main, struct ID *self, eCbEvent evt)
00032 {
00033     ListBase *lb= &callback_slots[evt];
00034     bCallbackFuncStore *funcstore;
00035 
00036     for(funcstore= (bCallbackFuncStore *)lb->first; funcstore; funcstore= (bCallbackFuncStore *)funcstore->next) {
00037         funcstore->func(main, self, funcstore->arg);
00038     }
00039 }
00040 
00041 void BLI_add_cb(bCallbackFuncStore *funcstore, eCbEvent evt)
00042 {
00043     ListBase *lb= &callback_slots[evt];
00044     BLI_addtail(lb, funcstore);
00045 }
00046 
00047 void BLI_cb_init(void)
00048 {
00049     /* do nothing */
00050 }
00051 
00052 /* call on application exit */
00053 void BLI_cb_finalize(void)
00054 {
00055     eCbEvent evt;
00056     for(evt= 0; evt < BLI_CB_EVT_TOT; evt++) {
00057         ListBase *lb= &callback_slots[evt];
00058         bCallbackFuncStore *funcstore;
00059         bCallbackFuncStore *funcstore_next;
00060         for(funcstore= (bCallbackFuncStore *)lb->first; funcstore; funcstore= funcstore_next) {
00061             funcstore_next= (bCallbackFuncStore *)funcstore->next;
00062             BLI_remlink(lb, funcstore);
00063             if(funcstore->alloc) {
00064                 MEM_freeN(funcstore);
00065             }
00066         }
00067     }
00068 }