Revision: 23847
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23847
Author:   blendix
Date:     2009-10-14 21:19:43 +0200 (Wed, 14 Oct 2009)

Log Message:
-----------
RNA:
* Enums with an _itemf callback now never get context NULL passed in,
  rather a fixed list of enum items are defined which should contain
  all items (if possible), from which the _itemf callback can then use
  a subset.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/armature/poselib.c
    trunk/blender/source/blender/editors/mesh/editmesh_mods.c
    trunk/blender/source/blender/editors/mesh/editmesh_tools.c
    trunk/blender/source/blender/editors/object/object_add.c
    trunk/blender/source/blender/editors/object/object_group.c
    trunk/blender/source/blender/editors/object/object_modifier.c
    trunk/blender/source/blender/editors/object/object_vgroup.c
    trunk/blender/source/blender/makesrna/intern/rna_access.c
    trunk/blender/source/blender/makesrna/intern/rna_constraint.c
    trunk/blender/source/blender/makesrna/intern/rna_define.c
    trunk/blender/source/blender/makesrna/intern/rna_image.c
    trunk/blender/source/blender/makesrna/intern/rna_material.c
    trunk/blender/source/blender/makesrna/intern/rna_object.c
    trunk/blender/source/blender/makesrna/intern/rna_object_force.c
    trunk/blender/source/blender/makesrna/intern/rna_particle.c
    trunk/blender/source/blender/makesrna/intern/rna_rna.c
    trunk/blender/source/blender/makesrna/intern/rna_sculpt_paint.c
    trunk/blender/source/blender/makesrna/intern/rna_space.c
    trunk/blender/source/blender/makesrna/intern/rna_texture.c

Modified: trunk/blender/source/blender/editors/armature/poselib.c
===================================================================
--- trunk/blender/source/blender/editors/armature/poselib.c     2009-10-14 
18:51:00 UTC (rev 23846)
+++ trunk/blender/source/blender/editors/armature/poselib.c     2009-10-14 
19:19:43 UTC (rev 23847)
@@ -432,9 +432,6 @@
        int totitem= 0;
        int i= 0;
 
-       if (C == NULL)
-               return NULL;
-
        memset(&item_tmp, 0, sizeof(item_tmp));
        
        /* check that the action exists */
@@ -448,12 +445,10 @@
                }
        }
 
-       if (i > 0) {
-               *free= 1;
-               return item;
-       }
-       else
-               return NULL;
+       RNA_enum_item_end(&item, &totitem);
+       *free= 1;
+
+       return item;
 }
 
 static int poselib_remove_exec (bContext *C, wmOperator *op)

Modified: trunk/blender/source/blender/editors/mesh/editmesh_mods.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_mods.c   2009-10-14 
18:51:00 UTC (rev 23846)
+++ trunk/blender/source/blender/editors/mesh/editmesh_mods.c   2009-10-14 
19:19:43 UTC (rev 23847)
@@ -658,16 +658,45 @@
 
 /* selects new faces/edges/verts based on the existing selection */
 
-/* FACES GROUP */
+/* VERT GROUP */
 
+#define SIMVERT_NORMAL 0
+#define SIMVERT_FACE   1
+#define SIMVERT_VGROUP 2
+#define SIMVERT_TOT            3
+
+/* EDGE GROUP */
+
+#define SIMEDGE_LENGTH         101
+#define SIMEDGE_DIR                    102
+#define SIMEDGE_FACE           103
+#define SIMEDGE_FACE_ANGLE     104
+#define SIMEDGE_CREASE         105
+#define SIMEDGE_SEAM           106
+#define SIMEDGE_SHARP          107
+#define SIMEDGE_TOT                    108
+
+/* FACE GROUP */
+
 #define SIMFACE_MATERIAL       201
 #define SIMFACE_IMAGE          202
 #define SIMFACE_AREA           203
 #define SIMFACE_PERIMETER      204
 #define SIMFACE_NORMAL         205
 #define SIMFACE_COPLANAR       206
+#define SIMFACE_TOT                    207
 
-static EnumPropertyItem prop_simface_types[] = {
+static EnumPropertyItem prop_similar_types[] = {
+       {SIMVERT_NORMAL, "NORMAL", 0, "Normal", ""},
+       {SIMVERT_FACE, "FACE", 0, "Amount of Vertices in Face", ""},
+       {SIMVERT_VGROUP, "VGROUP", 0, "Vertex Groups", ""},
+       {SIMEDGE_LENGTH, "LENGTH", 0, "Length", ""},
+       {SIMEDGE_DIR, "DIR", 0, "Direction", ""},
+       {SIMEDGE_FACE, "FACE", 0, "Amount of Vertices in Face", ""},
+       {SIMEDGE_FACE_ANGLE, "FACE_ANGLE", 0, "Face Angles", ""},
+       {SIMEDGE_CREASE, "CREASE", 0, "Crease", ""},
+       {SIMEDGE_SEAM, "SEAM", 0, "Seam", ""},
+       {SIMEDGE_SHARP, "SHARP", 0, "Sharpness", ""},
        {SIMFACE_MATERIAL, "MATERIAL", 0, "Material", ""},
        {SIMFACE_IMAGE, "IMAGE", 0, "Image", ""},
        {SIMFACE_AREA, "AREA", 0, "Area", ""},
@@ -831,27 +860,6 @@
 
 /* ***************************************************** */
 
-/* EDGE GROUP */
-
-#define SIMEDGE_LENGTH         101
-#define SIMEDGE_DIR                    102
-#define SIMEDGE_FACE           103
-#define SIMEDGE_FACE_ANGLE     104
-#define SIMEDGE_CREASE         105
-#define SIMEDGE_SEAM           106
-#define SIMEDGE_SHARP          107
-
-static EnumPropertyItem prop_simedge_types[] = {
-       {SIMEDGE_LENGTH, "LENGTH", 0, "Length", ""},
-       {SIMEDGE_DIR, "DIR", 0, "Direction", ""},
-       {SIMEDGE_FACE, "FACE", 0, "Amount of Vertices in Face", ""},
-       {SIMEDGE_FACE_ANGLE, "FACE_ANGLE", 0, "Face Angles", ""},
-       {SIMEDGE_CREASE, "CREASE", 0, "Crease", ""},
-       {SIMEDGE_SEAM, "SEAM", 0, "Seam", ""},
-       {SIMEDGE_SHARP, "SHARP", 0, "Sharpness", ""},
-       {0, NULL, 0, NULL, NULL}
-};
-
 static int similar_edge_select__internal(ToolSettings *ts, EditMesh *em, int 
mode)
 {
        EditEdge *eed, *base_eed=NULL;
@@ -1073,25 +1081,6 @@
 
 /* ********************************* */
 
-/*
-VERT GROUP
- mode 1: same normal
- mode 2: same number of face users
- mode 3: same vertex groups
-*/
-
-#define SIMVERT_NORMAL 0
-#define SIMVERT_FACE   1
-#define SIMVERT_VGROUP 2
-
-static EnumPropertyItem prop_simvertex_types[] = {
-       {SIMVERT_NORMAL, "NORMAL", 0, "Normal", ""},
-       {SIMVERT_FACE, "FACE", 0, "Amount of Vertices in Face", ""},
-       {SIMVERT_VGROUP, "VGROUP", 0, "Vertex Groups", ""},
-       {0, NULL, 0, NULL, NULL}
-};
-
-
 static int similar_vert_select_exec(bContext *C, wmOperator *op)
 {
        ToolSettings *ts= CTX_data_tool_settings(C);
@@ -1243,37 +1232,30 @@
 
 static EnumPropertyItem *select_similar_type_itemf(bContext *C, PointerRNA 
*ptr, int *free)
 {
-       Object *obedit;
+       Object *obedit= CTX_data_edit_object(C);
        EnumPropertyItem *item= NULL;
-       int totitem= 0;
-       
-       if(C) {
-               obedit= CTX_data_edit_object(C);
+       int a, totitem= 0;
                
-               if(obedit && obedit->type == OB_MESH) {
-                       EditMesh *em= BKE_mesh_get_editmesh(obedit->data); 
+       if(obedit && obedit->type == OB_MESH) {
+               EditMesh *em= BKE_mesh_get_editmesh(obedit->data); 
 
-                       if(em->selectmode & SCE_SELECT_VERTEX)
-                               RNA_enum_items_add(&item, &totitem, 
prop_simvertex_types);
-                       else if(em->selectmode & SCE_SELECT_EDGE)
-                               RNA_enum_items_add(&item, &totitem, 
prop_simedge_types);
-                       else if(em->selectmode & SCE_SELECT_FACE)
-                               RNA_enum_items_add(&item, &totitem, 
prop_simface_types);
-                       RNA_enum_item_end(&item, &totitem);
-
-                       *free= 1;
-
-                       return item;
+               if(em->selectmode & SCE_SELECT_VERTEX) {
+                       for(a=SIMVERT_NORMAL; a<=SIMVERT_TOT; a++)
+                               RNA_enum_items_add_value(&item, &totitem, 
prop_similar_types, a);
                }
+               else if(em->selectmode & SCE_SELECT_EDGE) {
+                       for(a=SIMEDGE_LENGTH; a<=SIMEDGE_TOT; a++)
+                               RNA_enum_items_add_value(&item, &totitem, 
prop_similar_types, a);
+               }
+               else if(em->selectmode & SCE_SELECT_FACE) {
+                       for(a=SIMFACE_MATERIAL; a<=SIMFACE_TOT; a++)
+                               RNA_enum_items_add_value(&item, &totitem, 
prop_similar_types, a);
+               }
        }
 
-       /* needed for doc generation */
-       RNA_enum_items_add(&item, &totitem, prop_simvertex_types);
-       RNA_enum_items_add(&item, &totitem, prop_simedge_types);
-       RNA_enum_items_add(&item, &totitem, prop_simface_types);
        RNA_enum_item_end(&item, &totitem);
        *free= 1;
-       
+
        return item;
 }
 
@@ -1295,7 +1277,7 @@
        ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
        
        /* properties */
-       prop= RNA_def_enum(ot->srna, "type", prop_simvertex_types, 
SIMVERT_NORMAL, "Type", "");
+       prop= RNA_def_enum(ot->srna, "type", prop_similar_types, 
SIMVERT_NORMAL, "Type", "");
        RNA_def_enum_funcs(prop, select_similar_type_itemf);
 }
 

Modified: trunk/blender/source/blender/editors/mesh/editmesh_tools.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_tools.c  2009-10-14 
18:51:00 UTC (rev 23846)
+++ trunk/blender/source/blender/editors/mesh/editmesh_tools.c  2009-10-14 
19:19:43 UTC (rev 23847)
@@ -5856,14 +5856,10 @@
 
 static EnumPropertyItem *merge_type_itemf(bContext *C, PointerRNA *ptr, int 
*free)
 {      
-       Object *obedit;
+       Object *obedit= CTX_data_edit_object(C);
        EnumPropertyItem *item= NULL;
        int totitem= 0;
-       
-       if(!C) /* needed for docs */
-               return merge_type_items;
-       
-       obedit= CTX_data_edit_object(C);
+
        if(obedit && obedit->type == OB_MESH) {
                EditMesh *em= BKE_mesh_get_editmesh(obedit->data);
 
@@ -5882,14 +5878,12 @@
                RNA_enum_items_add_value(&item, &totitem, merge_type_items, 3);
                RNA_enum_items_add_value(&item, &totitem, merge_type_items, 4);
                RNA_enum_items_add_value(&item, &totitem, merge_type_items, 5);
-               RNA_enum_item_end(&item, &totitem);
+       }
 
-               *free= 1;
+       RNA_enum_item_end(&item, &totitem);
+       *free= 1;
 
-               return item;
-       }
-       
-       return NULL;
+       return item;
 }
 
 void MESH_OT_merge(wmOperatorType *ot)

Modified: trunk/blender/source/blender/editors/object/object_add.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_add.c    2009-10-14 
18:51:00 UTC (rev 23846)
+++ trunk/blender/source/blender/editors/object/object_add.c    2009-10-14 
19:19:43 UTC (rev 23847)
@@ -608,9 +608,6 @@
        int i= 0;
        Group *group;
 
-       if(C==NULL)
-               return NULL;
-
        memset(&item_tmp, 0, sizeof(item_tmp));
 
        for(group= CTX_data_main(C)->group.first; group; group= group->id.next) 
{
@@ -619,13 +616,10 @@
                RNA_enum_item_add(&item, &totitem, &item_tmp);
        }
 
-       if(i>0) {
-               *free= 1;
-               return item;
-       }
-       else {
-               return NULL;
-       }
+       RNA_enum_item_end(&item, &totitem);
+       *free= 1;
+
+       return item;
 }
 
 static int group_instance_add_exec(bContext *C, wmOperator *op)

Modified: trunk/blender/source/blender/editors/object/object_group.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_group.c  2009-10-14 
18:51:00 UTC (rev 23846)
+++ trunk/blender/source/blender/editors/object/object_group.c  2009-10-14 
19:19:43 UTC (rev 23847)
@@ -275,18 +275,14 @@
 
 static EnumPropertyItem *group_itemf(bContext *C, PointerRNA *ptr, int *free)
 {      
+       Main *bmain= CTX_data_main(C);
+       Group *group;
        EnumPropertyItem tmp = {0, "", 0, "", ""};
        EnumPropertyItem *item= NULL;
-       Main *bmain;
-       Group *group;
        int a, totitem= 0;
        
-       if(!C) /* needed for docs */
-               return group_items;
-       
        RNA_enum_items_add_value(&item, &totitem, group_items, -1);
 
-       bmain= CTX_data_main(C);
        if(bmain->group.first)
                RNA_enum_item_add_separator(&item, &totitem);
 
@@ -298,7 +294,6 @@
        }
 
        RNA_enum_item_end(&item, &totitem);
-
        *free= 1;
 
        return item;

Modified: trunk/blender/source/blender/editors/object/object_modifier.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_modifier.c       
2009-10-14 18:51:00 UTC (rev 23846)
+++ trunk/blender/source/blender/editors/object/object_modifier.c       
2009-10-14 19:19:43 UTC (rev 23847)
@@ -440,12 +440,12 @@
 
 static EnumPropertyItem *modifier_add_itemf(bContext *C, PointerRNA *ptr, int 
*free)
 {      
+       Object *ob= CTX_data_active_object(C);
        EnumPropertyItem *item= NULL, *md_item;
        ModifierTypeInfo *mti;
-       Object *ob;
        int totitem= 0, a;
        
-       if(!C || !(ob= CTX_data_active_object(C))) /* needed for docs */
+       if(!ob)
                return modifier_type_items;
 
        for(a=0; modifier_type_items[a].identifier; a++) {
@@ -466,7 +466,6 @@
        }
 
        RNA_enum_item_end(&item, &totitem);
-
        *free= 1;
 
        return item;

Modified: trunk/blender/source/blender/editors/object/object_vgroup.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_vgroup.c 2009-10-14 
18:51:00 UTC (rev 23846)
+++ trunk/blender/source/blender/editors/object/object_vgroup.c 2009-10-14 
19:19:43 UTC (rev 23847)
@@ -1233,13 +1233,13 @@
 
 static EnumPropertyItem *vgroup_itemf(bContext *C, PointerRNA *ptr, int *free)
 {      
-       Object *ob;
+       Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data;
        EnumPropertyItem tmp = {0, "", 0, "", ""};
        EnumPropertyItem *item= NULL;
        bDeformGroup *def;
        int a, totitem= 0;
        

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to