[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