[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24659] trunk/blender: ID properties that are displayed via RNA can now define their own UI settings ,

Campbell Barton ideasman42 at gmail.com
Wed Nov 18 21:01:36 CET 2009


Revision: 24659
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24659
Author:   campbellbarton
Date:     2009-11-18 21:01:35 +0100 (Wed, 18 Nov 2009)

Log Message:
-----------
ID properties that are displayed via RNA can now define their own UI settings,
 only implimented min/max precision & step.

at the moment there is no way to edit these other then via python

example of setting UI limits...

>>> C.object['foo'] = 0.5
>>> C.object['_RNA_UI'] = {'foo': {'step': 0.5, 'soft_max': 10.0, 'soft_min': 0.0, 'precision': 2, 'description': 'Some setting'}}

Also fixed typo's: precission -> precision

Modified Paths:
--------------
    trunk/blender/release/scripts/modules/rna_prop_ui.py
    trunk/blender/release/scripts/ui/properties_object.py
    trunk/blender/release/scripts/ui/space_view3d.py
    trunk/blender/source/blender/blenkernel/BKE_idprop.h
    trunk/blender/source/blender/blenkernel/intern/idprop.c
    trunk/blender/source/blender/editors/interface/interface.c
    trunk/blender/source/blender/editors/space_sequencer/sequencer_draw.c
    trunk/blender/source/blender/editors/space_view3d/drawobject.c
    trunk/blender/source/blender/imbuf/intern/jp2.c
    trunk/blender/source/blender/makesrna/intern/rna_access.c
    trunk/blender/source/blender/makesrna/intern/rna_internal_types.h
    trunk/blender/source/blender/python/intern/bpy_rna.c

Modified: trunk/blender/release/scripts/modules/rna_prop_ui.py
===================================================================
--- trunk/blender/release/scripts/modules/rna_prop_ui.py	2009-11-18 19:35:03 UTC (rev 24658)
+++ trunk/blender/release/scripts/modules/rna_prop_ui.py	2009-11-18 20:01:35 UTC (rev 24659)
@@ -36,7 +36,7 @@
         Scene.StringProperty(attr=EVIL_PROP_PROP_ORIG)
 
 
-def draw(layout, context, context_member):
+def draw(layout, context, context_member, use_edit = True):
     
     def assign_props(prop, val, key):
         prop.path = context_member
@@ -63,11 +63,17 @@
     items = rna_item.items()
     items.sort()
     
-    row = layout.row()
-    props = row.itemO("wm.properties_add", properties=True, text="Add")
-    props.path = context_member
-    
+    if use_edit:
+        row = layout.row()
+        props = row.itemO("wm.properties_add", properties=True, text="Add")
+        props.path = context_member
+        del row
+
     for key, val in items:
+        
+        if key == '_RNA_UI':
+            continue
+        
         row = layout.row()
         convert_to_pyobject = getattr(val, "convert_to_pyobject", None)
         
@@ -80,7 +86,7 @@
 
         box = row.box()
         
-        if key == global_prop_orig and context_member == global_path:
+        if use_edit and key == global_prop_orig and context_member == global_path:
             split = box.split(percentage=0.75)
             
             row = split.row()
@@ -92,8 +98,12 @@
             assign_props(prop, val_draw, key)
             
         else:
-            split = box.split(percentage=0.75)
-            row = split.row()
+            if use_edit:
+                split = box.split(percentage=0.75)
+                row = split.row()
+            else:
+                row = box.row()
+            
             row.itemL(text=key)
             
             # explicit exception for arrays
@@ -102,13 +112,13 @@
             else:
                 row.itemR(rna_item, '["%s"]' % key, text="")
                 
-            
-            row = split.row(align=True)
-            prop = row.itemO("wm.properties_edit_begin", properties=True, text="edit")
-            assign_props(prop, val_draw, key)
-            
-            prop = row.itemO("wm.properties_remove", properties=True, text="", icon='ICON_ZOOMOUT')
-            assign_props(prop, val_draw, key)
+            if use_edit:
+                row = split.row(align=True)
+                prop = row.itemO("wm.properties_edit_begin", properties=True, text="edit")
+                assign_props(prop, val_draw, key)
+                
+                prop = row.itemO("wm.properties_remove", properties=True, text="", icon='ICON_ZOOMOUT')
+                assign_props(prop, val_draw, key)
     
 
 from bpy.props import *

Modified: trunk/blender/release/scripts/ui/properties_object.py
===================================================================
--- trunk/blender/release/scripts/ui/properties_object.py	2009-11-18 19:35:03 UTC (rev 24658)
+++ trunk/blender/release/scripts/ui/properties_object.py	2009-11-18 20:01:35 UTC (rev 24659)
@@ -299,7 +299,7 @@
 
     def draw(self, context):
         import rna_prop_ui
-        # reload(rna_prop_ui)
+        reload(rna_prop_ui)
         
         rna_prop_ui.draw(self.layout, context, "object")
 

Modified: trunk/blender/release/scripts/ui/space_view3d.py
===================================================================
--- trunk/blender/release/scripts/ui/space_view3d.py	2009-11-18 19:35:03 UTC (rev 24658)
+++ trunk/blender/release/scripts/ui/space_view3d.py	2009-11-18 20:01:35 UTC (rev 24659)
@@ -1629,6 +1629,29 @@
             col.itemR(toolsettings, "etch_side")
 
 
+class VIEW3D_PT_context_properties(bpy.types.Panel):
+    bl_space_type = 'VIEW_3D'
+    bl_region_type = 'UI'
+    bl_label = "Properties"
+    bl_default_closed = True
+
+    def draw(self, context):
+        import rna_prop_ui
+        # reload(rna_prop_ui)
+        obj = context.object
+        if obj:
+            mode = obj.mode
+            if mode == 'POSE':
+                item = "active_pchan"
+            elif mode == 'EDIT' and obj.type == 'ARMATURE':
+                item = "active_bone"
+            else:
+                item = "object"
+
+            # Draw with no edit button
+            rna_prop_ui.draw(self.layout, context, item, False)
+
+
 # Operators
 from bpy.props import *
 
@@ -1757,4 +1780,6 @@
 bpy.types.register(VIEW3D_PT_transform_orientations)
 bpy.types.register(VIEW3D_PT_etch_a_ton)
 
+bpy.types.register(VIEW3D_PT_context_properties)
+
 bpy.ops.add(OBJECT_OT_select_pattern)

Modified: trunk/blender/source/blender/blenkernel/BKE_idprop.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_idprop.h	2009-11-18 19:35:03 UTC (rev 24658)
+++ trunk/blender/source/blender/blenkernel/BKE_idprop.h	2009-11-18 20:01:35 UTC (rev 24659)
@@ -117,7 +117,7 @@
 */
 void IDP_RemFromGroup(struct IDProperty *group, struct IDProperty *prop);
 
-IDProperty *IDP_GetPropertyFromGroup(struct IDProperty *prop, char *name);
+IDProperty *IDP_GetPropertyFromGroup(struct IDProperty *prop, const char *name);
 
 /*Get an iterator to iterate over the members of an id property group.
  Note that this will automatically free the iterator once iteration is complete;

Modified: trunk/blender/source/blender/blenkernel/intern/idprop.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/idprop.c	2009-11-18 19:35:03 UTC (rev 24658)
+++ trunk/blender/source/blender/blenkernel/intern/idprop.c	2009-11-18 20:01:35 UTC (rev 24659)
@@ -442,7 +442,7 @@
 	BLI_remlink(&group->data.group, prop);
 }
 
-IDProperty *IDP_GetPropertyFromGroup(IDProperty *prop, char *name)
+IDProperty *IDP_GetPropertyFromGroup(IDProperty *prop, const char *name)
 {
 	IDProperty *loop;
 	for (loop=prop->data.group.first; loop; loop=loop->next) {

Modified: trunk/blender/source/blender/editors/interface/interface.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface.c	2009-11-18 19:35:03 UTC (rev 24658)
+++ trunk/blender/source/blender/editors/interface/interface.c	2009-11-18 20:01:35 UTC (rev 24659)
@@ -1355,15 +1355,15 @@
 	Scene *scene= CTX_data_scene((bContext *)but->block->evil_C);
 	int do_split= scene->unit.flag & USER_UNIT_OPT_SPLIT;
 	int unit_type=  RNA_SUBTYPE_UNIT_VALUE(RNA_property_subtype(but->rnaprop));
-	int precission= but->a2;
+	int precision= but->a2;
 
 	if(scene->unit.scale_length<0.0001) scene->unit.scale_length= 1.0; // XXX do_versions
 
 	/* Sanity checks */
-	if(precission>4)		precission= 4;
-	else if(precission==0)	precission= 2;
+	if(precision>4)		precision= 4;
+	else if(precision==0)	precision= 2;
 
-	bUnit_AsString(str, len_max, ui_get_but_scale_unit(but, value), precission, scene->unit.system, unit_type, do_split, pad);
+	bUnit_AsString(str, len_max, ui_get_but_scale_unit(but, value), precision, scene->unit.system, unit_type, do_split, pad);
 }
 
 static float ui_get_but_step_unit(uiBut *but, double value, float step_default)

Modified: trunk/blender/source/blender/editors/space_sequencer/sequencer_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_sequencer/sequencer_draw.c	2009-11-18 19:35:03 UTC (rev 24658)
+++ trunk/blender/source/blender/editors/space_sequencer/sequencer_draw.c	2009-11-18 20:01:35 UTC (rev 24659)
@@ -525,7 +525,7 @@
 /*
 Draw a sequence strip, bounds check alredy made
 ARegion is currently only used to get the windows width in pixels
-so wave file sample drawing precission is zoom adjusted
+so wave file sample drawing precision is zoom adjusted
 */
 static void draw_seq_strip(Scene *scene, ARegion *ar, SpaceSeq *sseq, Sequence *seq, int outline_tint, float pixelx)
 {

Modified: trunk/blender/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/drawobject.c	2009-11-18 19:35:03 UTC (rev 24658)
+++ trunk/blender/source/blender/editors/space_view3d/drawobject.c	2009-11-18 20:01:35 UTC (rev 24659)
@@ -2234,7 +2234,7 @@
 	if(G.f & (G_RENDER_OGL|G_RENDER_SHADOW))
 		return;
 
-	/* make the precission of the pronted value proportionate to the gridsize */
+	/* make the precision of the pronted value proportionate to the gridsize */
 
 	if (grid < 0.01f)
 		strcpy(conv_float, "%.6f");

Modified: trunk/blender/source/blender/imbuf/intern/jp2.c
===================================================================
--- trunk/blender/source/blender/imbuf/intern/jp2.c	2009-11-18 19:35:03 UTC (rev 24658)
+++ trunk/blender/source/blender/imbuf/intern/jp2.c	2009-11-18 20:01:35 UTC (rev 24659)
@@ -91,7 +91,7 @@
 struct ImBuf *imb_jp2_decode(unsigned char *mem, int size, int flags)
 {
 	struct ImBuf *ibuf = 0;
-	int use_float = 0; /* for precissions higher then 8 use float */
+	int use_float = 0; /* for precision higher then 8 use float */
 	unsigned char *rect= NULL;
 	float *rect_float= NULL;
 	

Modified: trunk/blender/source/blender/makesrna/intern/rna_access.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_access.c	2009-11-18 19:35:03 UTC (rev 24658)
+++ trunk/blender/source/blender/makesrna/intern/rna_access.c	2009-11-18 20:01:35 UTC (rev 24659)
@@ -190,6 +190,29 @@
 
 /* ID Properties */
 
+/* return a UI local ID prop definition for this prop */
+IDProperty *rna_idproperty_ui(PropertyRNA *prop)
+{
+	IDProperty *idprop;
+
+	for(idprop= ((IDProperty *)prop)->prev; idprop; idprop= idprop->prev) {
+		if (strcmp(RNA_IDP_UI, idprop->name)==0)
+			break;
+	}
+
+	if(idprop==NULL) {
+		for(idprop= ((IDProperty *)prop)->next; idprop; idprop= idprop->next) {
+			if (strcmp(RNA_IDP_UI, idprop->name)==0)
+				break;
+		}
+	}
+
+	if (idprop)
+		return IDP_GetPropertyFromGroup(idprop, ((IDProperty *)prop)->name);
+
+	return NULL;
+}
+
 IDProperty *RNA_struct_idproperties(PointerRNA *ptr, int create)
 {
 	StructRNA *type= ptr->type;
@@ -396,8 +419,17 @@
 {
 	if(prop->magic == RNA_MAGIC)
 		return prop->description;
-	else
+	else {
+		/* attempt to get the local ID values */
+		IDProperty *idp_ui= rna_idproperty_ui(prop);
+
+		if(idp_ui) { /* TODO, type checking on ID props */

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list