[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53397] trunk/blender: user-preferences for addons.

Campbell Barton ideasman42 at gmail.com
Sat Dec 29 11:24:43 CET 2012


Revision: 53397
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53397
Author:   campbellbarton
Date:     2012-12-29 10:24:42 +0000 (Sat, 29 Dec 2012)
Log Message:
-----------
user-preferences for addons. currently unused, example & docs still to come.

Modified Paths:
--------------
    trunk/blender/release/scripts/startup/bl_ui/space_userpref.py
    trunk/blender/source/blender/blenkernel/CMakeLists.txt
    trunk/blender/source/blender/blenkernel/intern/blender.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/blenloader/intern/writefile.c
    trunk/blender/source/blender/makesdna/DNA_userdef_types.h
    trunk/blender/source/blender/makesrna/RNA_access.h
    trunk/blender/source/blender/makesrna/intern/rna_userdef.c
    trunk/blender/source/blender/windowmanager/intern/wm_init_exit.c

Added Paths:
-----------
    trunk/blender/source/blender/blenkernel/BKE_addon.h
    trunk/blender/source/blender/blenkernel/intern/addon.c

Modified: trunk/blender/release/scripts/startup/bl_ui/space_userpref.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/space_userpref.py	2012-12-29 10:22:19 UTC (rev 53396)
+++ trunk/blender/release/scripts/startup/bl_ui/space_userpref.py	2012-12-29 10:24:42 UTC (rev 53397)
@@ -1162,7 +1162,8 @@
                         continue
 
                 # Addon UI Code
-                box = col.column().box()
+                col_box = col.column()
+                box = col_box.box()
                 colsub = box.column()
                 row = colsub.row()
 
@@ -1225,6 +1226,25 @@
                         for i in range(4 - tot_row):
                             split.separator()
 
+                    # Show addon user preferences
+                    if is_enabled:
+                        addon_preferences = userpref.addons[module_name].preferences
+                        if addon_preferences is not None:
+                            draw = getattr(addon_preferences, "draw", None)
+                            if draw is not None:
+                                addon_preferences_class = type(addon_preferences)
+                                box_prefs = col_box.box()
+                                box_prefs.label("Preferences:")
+                                addon_preferences_class.layout = box_prefs
+                                try:
+                                    draw(context)
+                                except:
+                                    import traceback
+                                    traceback.print_exc()
+                                    box_prefs.label(text="Error (see console)", icon='ERROR')
+                                del addon_preferences_class.layout
+
+
         # Append missing scripts
         # First collect scripts that are used but have no script file.
         module_names = {mod.__name__ for mod, info in addons}

Added: trunk/blender/source/blender/blenkernel/BKE_addon.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_addon.h	                        (rev 0)
+++ trunk/blender/source/blender/blenkernel/BKE_addon.h	2012-12-29 10:24:42 UTC (rev 53397)
@@ -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__ */


Property changes on: trunk/blender/source/blender/blenkernel/BKE_addon.h
___________________________________________________________________
Added: svn:eol-style
   + native

Modified: trunk/blender/source/blender/blenkernel/CMakeLists.txt
===================================================================
--- trunk/blender/source/blender/blenkernel/CMakeLists.txt	2012-12-29 10:22:19 UTC (rev 53396)
+++ trunk/blender/source/blender/blenkernel/CMakeLists.txt	2012-12-29 10:24:42 UTC (rev 53397)
@@ -58,6 +58,7 @@
 	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 @@
 
 	BKE_DerivedMesh.h
 	BKE_action.h
+	BKE_addon.h
 	BKE_anim.h
 	BKE_animsys.h
 	BKE_armature.h

Added: trunk/blender/source/blender/blenkernel/intern/addon.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/addon.c	                        (rev 0)
+++ trunk/blender/source/blender/blenkernel/intern/addon.c	2012-12-29 10:24:42 UTC (rev 53397)
@@ -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;
+}


Property changes on: trunk/blender/source/blender/blenkernel/intern/addon.c
___________________________________________________________________
Added: svn:eol-style
   + native

Modified: trunk/blender/source/blender/blenkernel/intern/blender.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/blender.c	2012-12-29 10:22:19 UTC (rev 53396)
+++ trunk/blender/source/blender/blenkernel/intern/blender.c	2012-12-29 10:24:42 UTC (rev 53397)
@@ -387,6 +387,7 @@
 	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 @@
 		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 */

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2012-12-29 10:22:19 UTC (rev 53396)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2012-12-29 10:24:42 UTC (rev 53397)
@@ -8646,6 +8646,7 @@
 	wmKeyMap *keymap;
 	wmKeyMapItem *kmi;
 	wmKeyMapDiffItem *kmdi;
+	bAddon *addon;
 	
 	bfd->user = user= read_struct(fd, bhead, "user def");
 	
@@ -8683,7 +8684,14 @@
 		for (kmi=keymap->items.first; kmi; kmi=kmi->next)
 			direct_link_keymapitem(fd, kmi);
 	}
-	
+
+	for (addon = user->addons.first; addon; addon = addon->next) {
+		addon->prop = newdataadr(fd, addon->prop);
+		if (addon->prop) {
+			IDP_DirectLinkProperty(addon->prop, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd);
+		}
+	}
+
 	// XXX
 	user->uifonts.first = user->uifonts.last= NULL;
 	

Modified: trunk/blender/source/blender/blenloader/intern/writefile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/writefile.c	2012-12-29 10:22:19 UTC (rev 53396)
+++ trunk/blender/source/blender/blenloader/intern/writefile.c	2012-12-29 10:24:42 UTC (rev 53397)
@@ -850,8 +850,12 @@
 			write_keymapitem(wd, kmi);
 	}
 
-	for (bext= U.addons.first; bext; bext=bext->next)
+	for (bext= U.addons.first; bext; bext=bext->next) {
 		writestruct(wd, DATA, "bAddon", 1, bext);
+		if (bext->prop) {
+			IDP_WriteProperty(bext->prop, wd);
+		}
+	}
 	
 	for (style= U.uistyles.first; style; style= style->next) {
 		writestruct(wd, DATA, "uiStyle", 1, style);

Modified: trunk/blender/source/blender/makesdna/DNA_userdef_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_userdef_types.h	2012-12-29 10:22:19 UTC (rev 53396)
+++ trunk/blender/source/blender/makesdna/DNA_userdef_types.h	2012-12-29 10:24:42 UTC (rev 53397)
@@ -343,6 +343,7 @@
 typedef struct bAddon {
 	struct bAddon *next, *prev;
 	char module[64];
+	IDProperty *prop;  /* User-Defined Properties on this  Addon (for storing preferences) */
 } bAddon;
 
 typedef struct SolidLight {

Modified: trunk/blender/source/blender/makesrna/RNA_access.h

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list