[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23858] trunk/blender: UI Templates: RNA-Path Builder (Skeleton Code)
Joshua Leung
aligorith at gmail.com
Thu Oct 15 12:14:01 CEST 2009
Revision: 23858
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23858
Author: aligorith
Date: 2009-10-15 12:13:59 +0200 (Thu, 15 Oct 2009)
Log Message:
-----------
UI Templates: RNA-Path Builder (Skeleton Code)
Added a base-template for editing/creating RNA-Paths. This is now used for KeyingSets and Driver UI's, so that when the actual magic gets put in, it will work.
Modified Paths:
--------------
trunk/blender/release/scripts/ui/buttons_scene.py
trunk/blender/source/blender/editors/include/UI_interface.h
trunk/blender/source/blender/editors/interface/interface_templates.c
trunk/blender/source/blender/editors/space_graph/graph_buttons.c
trunk/blender/source/blender/makesrna/intern/rna_ui_api.c
Modified: trunk/blender/release/scripts/ui/buttons_scene.py
===================================================================
--- trunk/blender/release/scripts/ui/buttons_scene.py 2009-10-15 09:56:10 UTC (rev 23857)
+++ trunk/blender/release/scripts/ui/buttons_scene.py 2009-10-15 10:13:59 UTC (rev 23858)
@@ -97,7 +97,7 @@
col = layout.column()
col.itemL(text="Target:")
col.template_any_ID(ksp, "id", "id_type")
- col.itemR(ksp, "rna_path")
+ col.template_path_builder(ksp, "rna_path", ksp.id)
row = layout.row()
Modified: trunk/blender/source/blender/editors/include/UI_interface.h
===================================================================
--- trunk/blender/source/blender/editors/include/UI_interface.h 2009-10-15 09:56:10 UTC (rev 23857)
+++ trunk/blender/source/blender/editors/include/UI_interface.h 2009-10-15 10:13:59 UTC (rev 23858)
@@ -622,6 +622,8 @@
char *newop, char *openop, char *unlinkop);
void uiTemplateAnyID(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname,
char *proptypename, char *text);
+void uiTemplatePathBuilder(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname,
+ struct PointerRNA *root_ptr, char *text);
uiLayout *uiTemplateModifier(uiLayout *layout, struct PointerRNA *ptr);
uiLayout *uiTemplateConstraint(uiLayout *layout, struct PointerRNA *ptr);
void uiTemplatePreview(uiLayout *layout, struct ID *id, struct ID *parent, struct MTex *slot);
Modified: trunk/blender/source/blender/editors/interface/interface_templates.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_templates.c 2009-10-15 09:56:10 UTC (rev 23857)
+++ trunk/blender/source/blender/editors/interface/interface_templates.c 2009-10-15 10:13:59 UTC (rev 23858)
@@ -405,9 +405,10 @@
}
/************************ ID Chooser Template ***************************/
-/* This is for selecting the type of ID-block to use, and then from the relevant type choosing the block to use */
-/* - propname: property identifier for property that ID-pointer gets stored to
+/* This is for selecting the type of ID-block to use, and then from the relevant type choosing the block to use
+ *
+ * - propname: property identifier for property that ID-pointer gets stored to
* - proptypename: property identifier for property used to determine the type of ID-pointer that can be used
*/
void uiTemplateAnyID(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propname, char *proptypename, char *text)
@@ -438,12 +439,42 @@
uiItemL(row, "ID-Block:", 0);
/* ID-Type Selector - just have a menu of icons */
+ // FIXME: the icon-only setting doesn't work when we supply a blank name
uiItemFullR(row, "", 0, ptr, propType, 0, 0, UI_ITEM_R_ICON_ONLY);
/* ID-Block Selector - just use pointer widget... */
uiItemFullR(row, "", 0, ptr, propID, 0, 0, 0);
}
+/********************* RNA Path Builder Template ********************/
+
+/* This is creating/editing RNA-Paths
+ *
+ * - ptr: struct which holds the path property
+ * - propname: property identifier for property that path gets stored to
+ * - root_ptr: struct that path gets built from
+ */
+void uiTemplatePathBuilder(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propname, PointerRNA *root_ptr, char *text)
+{
+ PropertyRNA *propPath;
+ uiLayout *row;
+
+ /* check that properties are valid */
+ propPath= RNA_struct_find_property(ptr, propname);
+ if (!propPath || RNA_property_type(propPath) != PROP_STRING) {
+ printf("uiTemplatePathBuilder: path property not found: %s\n", propname);
+ return;
+ }
+
+ /* Start drawing UI Elements using standard defines */
+ row= uiLayoutRow(layout, 1);
+
+ /* Path (existing string) Widget */
+ uiItemR(row, text, ICON_RNA, ptr, propname, 0);
+
+ // TODO: attach something to this to make allow searching of nested properties to 'build' the path
+}
+
/************************ Modifier Template *************************/
#define ERROR_LIBDATA_MESSAGE "Can't edit external libdata"
Modified: trunk/blender/source/blender/editors/space_graph/graph_buttons.c
===================================================================
--- trunk/blender/source/blender/editors/space_graph/graph_buttons.c 2009-10-15 09:56:10 UTC (rev 23857)
+++ trunk/blender/source/blender/editors/space_graph/graph_buttons.c 2009-10-15 10:13:59 UTC (rev 23858)
@@ -339,11 +339,15 @@
/* Target Property */
// TODO: make this less technical...
if (dtar->id) {
+ PointerRNA root_ptr;
+
+ /* get pointer for resolving the property selected */
+ RNA_id_pointer_create(dtar->id, &root_ptr);
+
col= uiLayoutColumn(box, 1);
block= uiLayoutGetBlock(col);
/* rna path */
- // TODO: this needs path constructor widget
- uiItemR(col, "Path", 0, &dtar_ptr, "rna_path", 0);
+ uiTemplatePathBuilder(col, (bContext *)C, &dtar_ptr, "rna_path", &root_ptr, "Path");
/* array index */
// TODO: this needs selector which limits it to ok values
Modified: trunk/blender/source/blender/makesrna/intern/rna_ui_api.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_ui_api.c 2009-10-15 09:56:10 UTC (rev 23857)
+++ trunk/blender/source/blender/makesrna/intern/rna_ui_api.c 2009-10-15 10:13:59 UTC (rev 23858)
@@ -266,6 +266,16 @@
RNA_def_property_flag(parm, PROP_REQUIRED);
parm= RNA_def_string(func, "text", "", 0, "", "Custom label to display in UI.");
+ func= RNA_def_function(srna, "template_path_builder", "uiTemplatePathBuilder");
+ RNA_def_function_flag(func, FUNC_USE_CONTEXT);
+ parm= RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take property.");
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR|PROP_NEVER_NULL);
+ parm= RNA_def_string(func, "property", "", 0, "", "Identifier of property in data.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ parm= RNA_def_pointer(func, "root", "ID", "", "ID-block from which path is evaluated from.");
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR);
+ parm= RNA_def_string(func, "text", "", 0, "", "Custom label to display in UI.");
+
func= RNA_def_function(srna, "template_modifier", "uiTemplateModifier");
parm= RNA_def_pointer(func, "data", "Modifier", "", "Modifier data.");
RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR|PROP_NEVER_NULL);
More information about the Bf-blender-cvs
mailing list