[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41881] trunk/blender/source/blender: add support for python __doc__ comments in menu classes showing in the tooltip , since menus are used as buttons too.

Campbell Barton ideasman42 at gmail.com
Tue Nov 15 15:58:14 CET 2011


Revision: 41881
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41881
Author:   campbellbarton
Date:     2011-11-15 14:58:14 +0000 (Tue, 15 Nov 2011)
Log Message:
-----------
add support for python __doc__ comments in menu classes showing in the tooltip, since menus are used as buttons too.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_screen.h
    trunk/blender/source/blender/editors/interface/interface_layout.c
    trunk/blender/source/blender/makesrna/intern/rna_ui.c

Modified: trunk/blender/source/blender/blenkernel/BKE_screen.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_screen.h	2011-11-15 14:20:57 UTC (rev 41880)
+++ trunk/blender/source/blender/blenkernel/BKE_screen.h	2011-11-15 14:58:14 UTC (rev 41881)
@@ -207,6 +207,7 @@
 
 	char		idname[BKE_ST_MAXNAME];	/* unique name */
 	char		label[BKE_ST_MAXNAME];	/* for button text */
+	char       *description;
 
 	/* verify if the menu should draw or not */
 	int			(*poll)(const struct bContext *, struct MenuType *);

Modified: trunk/blender/source/blender/editors/interface/interface_layout.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_layout.c	2011-11-15 14:20:57 UTC (rev 41880)
+++ trunk/blender/source/blender/editors/interface/interface_layout.c	2011-11-15 14:58:14 UTC (rev 41881)
@@ -1430,7 +1430,7 @@
 	if(layout->root->type == UI_LAYOUT_MENU && !icon)
 		icon= ICON_BLANK1;
 
-	ui_item_menu(layout, name, icon, ui_item_menutype_func, mt, NULL, ""); /* TODO, menu description */
+	ui_item_menu(layout, name, icon, ui_item_menutype_func, mt, NULL, mt->description);
 }
 
 /* label item */

Modified: trunk/blender/source/blender/makesrna/intern/rna_ui.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_ui.c	2011-11-15 14:20:57 UTC (rev 41880)
+++ trunk/blender/source/blender/makesrna/intern/rna_ui.c	2011-11-15 14:58:14 UTC (rev 41881)
@@ -56,6 +56,8 @@
 
 #ifdef RNA_RUNTIME
 
+#include <assert.h>
+
 #include "MEM_guardedalloc.h"
 
 #include "RNA_access.h"
@@ -411,6 +413,7 @@
 	WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL);
 }
 
+static char _menu_descr[1024];
 static StructRNA *rna_Menu_register(Main *bmain, ReportList *reports, void *data, const char *identifier,
                                     StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free)
 {
@@ -418,11 +421,17 @@
 	Menu dummymenu= {NULL};
 	PointerRNA dummymtr;
 	int have_function[2];
+	size_t over_alloc= 0; /* warning, if this becomes a bess, we better do another alloc */
+	size_t description_size= 0;
 
 	/* setup dummy menu & menu type to store static properties in */
 	dummymenu.type= &dummymt;
+	dummymenu.type->description= _menu_descr;
 	RNA_pointer_create(NULL, &RNA_Menu, &dummymenu, &dummymtr);
 
+	/* clear incase they are left unset */
+	_menu_descr[0]= '\0';
+
 	/* validate the python class */
 	if(validate(&dummymtr, data, have_function) != 0)
 		return NULL;
@@ -439,9 +448,20 @@
 		rna_Menu_unregister(bmain, mt->ext.srna);
 	
 	/* create a new menu type */
-	mt= MEM_callocN(sizeof(MenuType), "python buttons menu");
+	if (_menu_descr[0]) {
+		description_size= strlen(_menu_descr) + 1;
+		over_alloc += description_size;
+	}
+
+	mt= MEM_callocN(sizeof(MenuType) + over_alloc, "python buttons menu");
 	memcpy(mt, &dummymt, sizeof(dummymt));
 
+	if (_menu_descr[0]) {
+		char *buf= (char *)(mt + 1);
+		memcpy(buf, _menu_descr, description_size);
+		mt->description= buf;
+	}
+
 	mt->ext.srna= RNA_def_struct(&BLENDER_RNA, mt->idname, "Menu"); 
 	mt->ext.data= data;
 	mt->ext.call= call;
@@ -466,6 +486,14 @@
 	return (hdr->type && hdr->type->ext.srna)? hdr->type->ext.srna: &RNA_Menu;
 }
 
+static void rna_Menu_bl_description_set(PointerRNA *ptr, const char *value)
+{
+	Menu *data= (Menu*)(ptr->data);
+	char *str= (char *)data->type->description;
+	if(!str[0])	strcpy(str, value);
+	else		assert(!"setting the bl_description on a non-builtin menu");
+}
+
 static int rna_UILayout_active_get(PointerRNA *ptr)
 {
 	return uiLayoutGetActive(ptr->data);
@@ -800,6 +828,13 @@
 	RNA_def_property_flag(prop, PROP_REGISTER);
 	RNA_def_property_ui_text(prop, "Label", "The menu label");
 
+	prop= RNA_def_property(srna, "bl_description", PROP_STRING, PROP_TRANSLATE);
+	RNA_def_property_string_sdna(prop, NULL, "type->description");
+	RNA_def_property_string_maxlength(prop, 1024); /* else it uses the pointer size! */
+	RNA_def_property_string_funcs(prop, NULL, NULL, "rna_Menu_bl_description_set");
+	// RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+	RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL);
+
 	RNA_define_verify_sdna(1);
 }
 




More information about the Bf-blender-cvs mailing list