[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23824] trunk/blender: UI Templates: (' Any ID' Selector)
Joshua Leung
aligorith at gmail.com
Wed Oct 14 11:08:53 CEST 2009
Revision: 23824
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23824
Author: aligorith
Date: 2009-10-14 11:08:53 +0200 (Wed, 14 Oct 2009)
Log Message:
-----------
UI Templates: ('Any ID' Selector)
Added new template for choosing to use any type of ID-block. The first combo box allows you to choose the type of ID-block that gets used, and the second box allows you to choose the ID-block of the type specified by the first one.
This is currently used for setting the ID-block used for Keying Sets, but the main user for this was intended to be the Drivers UI. However, I still need to clear up a few button-event issues there before I can port this over.
Additional Bugfixes:
* Adding new Keying Set path was setting the active path wrong, meaning that you had to click on the list to get some response after adding
* Bone Groups list was being drawn too long by default (when empty)
Modified Paths:
--------------
trunk/blender/release/scripts/ui/buttons_data_armature.py
trunk/blender/release/scripts/ui/buttons_scene.py
trunk/blender/source/blender/editors/animation/keyingsets.c
trunk/blender/source/blender/editors/include/UI_interface.h
trunk/blender/source/blender/editors/interface/interface_templates.c
trunk/blender/source/blender/makesdna/DNA_anim_types.h
trunk/blender/source/blender/makesrna/RNA_enum_types.h
trunk/blender/source/blender/makesrna/intern/rna_ID.c
trunk/blender/source/blender/makesrna/intern/rna_animation.c
trunk/blender/source/blender/makesrna/intern/rna_fcurve.c
trunk/blender/source/blender/makesrna/intern/rna_ui_api.c
Modified: trunk/blender/release/scripts/ui/buttons_data_armature.py
===================================================================
--- trunk/blender/release/scripts/ui/buttons_data_armature.py 2009-10-14 09:08:48 UTC (rev 23823)
+++ trunk/blender/release/scripts/ui/buttons_data_armature.py 2009-10-14 09:08:53 UTC (rev 23824)
@@ -88,7 +88,7 @@
pose = ob.pose
row = layout.row()
- row.template_list(pose, "bone_groups", pose, "active_bone_group_index")
+ row.template_list(pose, "bone_groups", pose, "active_bone_group_index", rows=2)
col = row.column(align=True)
col.active = (ob.proxy == None)
Modified: trunk/blender/release/scripts/ui/buttons_scene.py
===================================================================
--- trunk/blender/release/scripts/ui/buttons_scene.py 2009-10-14 09:08:48 UTC (rev 23823)
+++ trunk/blender/release/scripts/ui/buttons_scene.py 2009-10-14 09:08:53 UTC (rev 23824)
@@ -527,7 +527,7 @@
if ksp:
col = layout.column()
col.itemL(text="Target:")
- col.itemR(ksp, "id")
+ col.template_any_ID(ksp, "id", "id_type")
col.itemR(ksp, "rna_path")
Modified: trunk/blender/source/blender/editors/animation/keyingsets.c
===================================================================
--- trunk/blender/source/blender/editors/animation/keyingsets.c 2009-10-14 09:08:48 UTC (rev 23823)
+++ trunk/blender/source/blender/editors/animation/keyingsets.c 2009-10-14 09:08:53 UTC (rev 23824)
@@ -219,7 +219,7 @@
/* don't use the API method for this, since that checks on values... */
ksp= MEM_callocN(sizeof(KS_Path), "KeyingSetPath Empty");
BLI_addtail(&ks->paths, ksp);
- ks->active_path= BLI_countlist(&ks->paths) + 1;
+ ks->active_path= BLI_countlist(&ks->paths);
ksp->groupmode= KSP_GROUP_KSNAME; // XXX?
Modified: trunk/blender/source/blender/editors/include/UI_interface.h
===================================================================
--- trunk/blender/source/blender/editors/include/UI_interface.h 2009-10-14 09:08:48 UTC (rev 23823)
+++ trunk/blender/source/blender/editors/include/UI_interface.h 2009-10-14 09:08:53 UTC (rev 23824)
@@ -620,6 +620,8 @@
void uiTemplateHeader(uiLayout *layout, struct bContext *C, int menus);
void uiTemplateID(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname,
char *newop, char *openop, char *unlinkop);
+void uiTemplateAnyID(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname,
+ char *proptypename, 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-14 09:08:48 UTC (rev 23823)
+++ trunk/blender/source/blender/editors/interface/interface_templates.c 2009-10-14 09:08:53 UTC (rev 23824)
@@ -152,6 +152,7 @@
}
/************************ ID Template ***************************/
+/* This is for browsing and editing the ID-blocks used */
/* for new/open operators */
void uiIDContextProperty(bContext *C, PointerRNA *ptr, PropertyRNA **prop)
@@ -390,7 +391,10 @@
type= RNA_property_pointer_type(ptr, prop);
template->idlb= wich_libbase(CTX_data_main(C), RNA_type_to_ID_code(type));
-
+
+ /* create UI elements for this template
+ * - template_ID makes a copy of the template data and assigns it to the relevant buttons
+ */
if(template->idlb) {
uiLayoutRow(layout, 1);
block= uiLayoutGetBlock(layout);
@@ -400,6 +404,47 @@
MEM_freeN(template);
}
+/************************ 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
+ * - 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)
+{
+ PropertyRNA *propID, *propType;
+ uiLayout *row;
+
+ /* get properties... */
+ propID= RNA_struct_find_property(ptr, propname);
+ propType= RNA_struct_find_property(ptr, proptypename);
+
+ if (!propID || RNA_property_type(propID) != PROP_POINTER) {
+ printf("uiTemplateAnyID: pointer property not found: %s\n", propname);
+ return;
+ }
+ if (!propType || RNA_property_type(propType) != PROP_ENUM) {
+ printf("uiTemplateAnyID: pointer-type property not found: %s\n", proptypename);
+ return;
+ }
+
+ /* Start drawing UI Elements using standard defines */
+ row= uiLayoutRow(layout, 1);
+
+ /* Label - either use the provided text, or will become "ID-Block:" */
+ if (text)
+ uiItemL(row, text, 0);
+ else
+ uiItemL(row, "ID-Block:", 0);
+
+ /* ID-Type Selector - just have a menu of icons */
+ // XXX should value really be 0?
+ 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);
+}
+
/************************ Modifier Template *************************/
#define ERROR_LIBDATA_MESSAGE "Can't edit external libdata"
Modified: trunk/blender/source/blender/makesdna/DNA_anim_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_anim_types.h 2009-10-14 09:08:48 UTC (rev 23823)
+++ trunk/blender/source/blender/makesdna/DNA_anim_types.h 2009-10-14 09:08:53 UTC (rev 23824)
@@ -246,7 +246,9 @@
char *rna_path; /* target channel to use as driver value */
int array_index; /* if applicable, the index of the RNA-array item to use as driver */
+ int idtype; /* type of ID-block that this target can use */
int flags; /* flags for the validity of the target */
+ int pad;
char name[64]; /* name of the variable */
} DriverTarget;
Modified: trunk/blender/source/blender/makesrna/RNA_enum_types.h
===================================================================
--- trunk/blender/source/blender/makesrna/RNA_enum_types.h 2009-10-14 09:08:48 UTC (rev 23823)
+++ trunk/blender/source/blender/makesrna/RNA_enum_types.h 2009-10-14 09:08:53 UTC (rev 23824)
@@ -29,6 +29,9 @@
/* Types */
+extern EnumPropertyItem id_type_items[];
+
+
extern EnumPropertyItem object_mode_items[];
extern EnumPropertyItem proportional_falloff_items[];
Modified: trunk/blender/source/blender/makesrna/intern/rna_ID.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_ID.c 2009-10-14 09:08:48 UTC (rev 23823)
+++ trunk/blender/source/blender/makesrna/intern/rna_ID.c 2009-10-14 09:08:53 UTC (rev 23824)
@@ -33,6 +33,38 @@
#include "rna_internal.h"
+/* enum of ID-block types
+ * NOTE: need to keep this in line with the other defines for these
+ */
+EnumPropertyItem id_type_items[] = {
+ {ID_AC, "ACTION", ICON_ACTION, "Action", ""},
+ {ID_AR, "ARMATURE", ICON_ARMATURE_DATA, "Armature", ""},
+ {ID_BR, "BRUSH", ICON_BRUSH_DATA, "Brush", ""},
+ {ID_CA, "CAMERA", ICON_CAMERA_DATA, "Camera", ""},
+ {ID_CU, "CURVE", ICON_CURVE_DATA, "Curve", ""},
+ {ID_VF, "FONT", ICON_FONT_DATA, "Font", ""},
+ {ID_GD, "GREASEPENCIL", ICON_GREASEPENCIL, "Grease Pencil", ""},
+ {ID_GR, "GROUP", ICON_GROUP, "Group", ""},
+ {ID_IM, "IMAGE", ICON_IMAGE_DATA, "Image", ""},
+ {ID_KE, "KEY", ICON_SHAPEKEY_DATA, "Key", ""},
+ {ID_LA, "LAMP", ICON_LAMP_DATA, "Lamp", ""},
+ {ID_LI, "LIBRARY", 0, "Library", ""},
+ {ID_LT, "LATTICE", ICON_LATTICE_DATA, "Lattice", ""},
+ {ID_MA, "MATERIAL", ICON_MATERIAL_DATA, "Material", ""},
+ {ID_MB, "META", ICON_META_DATA, "MetaBall", ""},
+ {ID_ME, "MESH", ICON_MESH_DATA, "Mesh", ""},
+ {ID_NT, "NODETREE", 0, "NodeTree", ""},
+ {ID_OB, "OBJECT", ICON_OBJECT_DATA, "Object", ""},
+ {ID_PA, "PARTICLE", ICON_PARTICLE_DATA, "Particle", ""},
+ {ID_SCE, "SCENE", ICON_SCENE_DATA, "Scene", ""},
+ {ID_SCR, "SCREEN", 0, "Screen", ""},
+ {ID_SO, "SOUND", 0, "Sound", ""},
+ {ID_TXT, "TEXT", ICON_TEXT, "Text", ""},
+ {ID_TE, "TEXTURE", ICON_TEXTURE_DATA, "Texture", ""},
+ {ID_WO, "WORLD", ICON_WORLD_DATA, "World", ""},
+ {ID_WM, "WINDOWMANAGER", 0, "Window Manager", ""},
+ {0, NULL, 0, NULL, NULL}};
+
#ifdef RNA_RUNTIME
#include "BKE_idprop.h"
Modified: trunk/blender/source/blender/makesrna/intern/rna_animation.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_animation.c 2009-10-14 09:08:48 UTC (rev 23823)
+++ trunk/blender/source/blender/makesrna/intern/rna_animation.c 2009-10-14 09:08:53 UTC (rev 23824)
@@ -24,6 +24,7 @@
#include <stdlib.h>
+#include "RNA_access.h"
#include "RNA_define.h"
#include "RNA_types.h"
#include "RNA_enum_types.h"
@@ -63,6 +64,20 @@
adt->action= value.data;
}
+/* ****************************** */
+
+static StructRNA *rna_ksPath_id_typef(PointerRNA *ptr)
+{
+ KS_Path *ksp= (KS_Path*)ptr->data;
+ return ID_code_to_RNA_type(ksp->idtype);
+}
+
+static int rna_ksPath_id_editable(PointerRNA *ptr)
+{
+ KS_Path *ksp= (KS_Path*)ptr->data;
+ return (ksp->idtype)? PROP_EDITABLE : 0;
+}
+
static void rna_ksPath_RnaPath_get(PointerRNA *ptr, char *value)
{
KS_Path *ksp= (KS_Path *)ptr->data;
@@ -96,6 +111,7 @@
ksp->rna_path= NULL;
}
+/* ****************************** */
static int rna_KeyingSet_active_ksPath_editable(PointerRNA *ptr)
{
@@ -153,8 +169,18 @@
/* ID */
prop= RNA_def_property(srna, "id", PROP_POINTER, PROP_NONE);
+ RNA_def_property_struct_type(prop, "ID");
+ RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_editable_func(prop, "rna_ksPath_id_editable");
+ RNA_def_property_pointer_funcs(prop, NULL, NULL, "rna_ksPath_id_typef");
RNA_def_property_ui_text(prop, "ID-Block", "ID-Block that keyframes for Keying Set should be added to (for Absolute Keying Sets only).");
+ prop= RNA_def_property(srna, "id_type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "idtype");
+ RNA_def_property_enum_items(prop, id_type_items);
+ RNA_def_property_enum_default(prop, ID_OB);
+ RNA_def_property_ui_text(prop, "ID Type", "Type of ID-block that can be used.");
+
/* Group */
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list