diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-12-29 14:24:42 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-12-29 14:24:42 +0400 |
commit | 79c2571e56e79c28d6f22984112387d83782162a (patch) | |
tree | e634b4a3da1f60729d48172be667578f0b06f420 /source/blender/blenkernel | |
parent | 18f134304c0c6181668a0a8c22289fcaeb472432 (diff) |
user-preferences for addons. currently unused, example & docs still to come.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_addon.h | 42 | ||||
-rw-r--r-- | source/blender/blenkernel/CMakeLists.txt | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/addon.c | 84 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/blender.c | 11 |
4 files changed, 138 insertions, 1 deletions
diff --git a/source/blender/blenkernel/BKE_addon.h b/source/blender/blenkernel/BKE_addon.h new file mode 100644 index 00000000000..eafaec3e605 --- /dev/null +++ b/source/blender/blenkernel/BKE_addon.h @@ -0,0 +1,42 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Contributor(s): Campbell Barton + * + * ***** END GPL LICENSE BLOCK ***** + */ +#ifndef __BKE_ADDON_H__ +#define __BKE_ADDON_H__ + +#include "RNA_types.h" + +typedef struct bAddonPrefType { + /* type info */ + char idname[64]; // best keep the same size as BKE_ST_MAXNAME + + /* RNA integration */ + ExtensionRNA ext; +} bAddonPrefType; + +bAddonPrefType *BKE_addon_pref_type_find(const char *idname, int quiet); +void BKE_addon_pref_type_add(bAddonPrefType *apt); +void BKE_addon_pref_type_remove(bAddonPrefType *apt); + +void BKE_addon_pref_type_init(void); +void BKE_addon_pref_type_free(void); + +#endif /* __BKE_ADDON_H__ */ diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt index b350cb718c8..2502773e7f5 100644 --- a/source/blender/blenkernel/CMakeLists.txt +++ b/source/blender/blenkernel/CMakeLists.txt @@ -58,6 +58,7 @@ set(SRC intern/CCGSubSurf.c intern/DerivedMesh.c intern/action.c + intern/addon.c intern/anim.c intern/anim_sys.c intern/armature.c @@ -152,6 +153,7 @@ set(SRC BKE_DerivedMesh.h BKE_action.h + BKE_addon.h BKE_anim.h BKE_animsys.h BKE_armature.h diff --git a/source/blender/blenkernel/intern/addon.c b/source/blender/blenkernel/intern/addon.c new file mode 100644 index 00000000000..a1b9eb8d970 --- /dev/null +++ b/source/blender/blenkernel/intern/addon.c @@ -0,0 +1,84 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Contributor(s): Campbell Barton + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include <stddef.h> + +#include "BLI_utildefines.h" +#include "BLI_ghash.h" +#include "BLI_string.h" + +#include "BKE_addon.h" /* own include */ + +#include "RNA_access.h" +#include "RNA_define.h" + +#include "BLF_translation.h" + +#include "MEM_guardedalloc.h" + +static GHash *global_addonpreftype_hash = NULL; + + +bAddonPrefType *BKE_addon_pref_type_find(const char *idname, int quiet) +{ + if (idname[0]) { + bAddonPrefType *apt; + + apt = BLI_ghash_lookup(global_addonpreftype_hash, idname); + if (apt) { + return apt; + } + + if (!quiet) { + printf("search for unknown addon-ref '%s'\n", idname); + } + } + else { + if (!quiet) { + printf("search for empty addon"); + } + } + + return NULL; +} + +void BKE_addon_pref_type_add(bAddonPrefType *apt) +{ + BLI_ghash_insert(global_addonpreftype_hash, (void *)apt->idname, apt); +} + +void BKE_addon_pref_type_remove(bAddonPrefType *apt) +{ + BLI_ghash_remove(global_addonpreftype_hash, (void *)apt->idname, NULL, (GHashValFreeFP)MEM_freeN); +} + +void BKE_addon_pref_type_init(void) +{ + BLI_assert(global_addonpreftype_hash == NULL); + global_addonpreftype_hash = BLI_ghash_str_new(__func__); +} + +void BKE_addon_pref_type_free(void) +{ + BLI_ghash_free(global_addonpreftype_hash, NULL, (GHashValFreeFP)MEM_freeN); + global_addonpreftype_hash = NULL; +} diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c index 5c0856bc95b..11ae242023c 100644 --- a/source/blender/blenkernel/intern/blender.c +++ b/source/blender/blenkernel/intern/blender.c @@ -387,6 +387,7 @@ void BKE_userdef_free(void) wmKeyMap *km; wmKeyMapItem *kmi; wmKeyMapDiffItem *kmdi; + bAddon *addon, *addon_next; for (km = U.user_keymaps.first; km; km = km->next) { for (kmdi = km->diff_items.first; kmdi; kmdi = kmdi->next) { @@ -407,11 +408,19 @@ void BKE_userdef_free(void) BLI_freelistN(&km->items); } + for (addon = U.addons.first; addon; addon = addon_next) { + addon_next = addon->next; + if (addon->prop) { + IDP_FreeProperty(addon->prop); + MEM_freeN(addon->prop); + } + MEM_freeN(addon); + } + BLI_freelistN(&U.uistyles); BLI_freelistN(&U.uifonts); BLI_freelistN(&U.themes); BLI_freelistN(&U.user_keymaps); - BLI_freelistN(&U.addons); } /* handle changes in settings that need recalc */ |