RNA
authorBrecht Van Lommel <brechtvanlommel@pandora.be>
Tue, 14 Jul 2009 17:35:07 +0000 (17:35 +0000)
committerBrecht Van Lommel <brechtvanlommel@pandora.be>
Tue, 14 Jul 2009 17:35:07 +0000 (17:35 +0000)
* RNA_enum_items_add_value and RNA_enum_item_add_separator utility
  functions, to add an item from an existing array with a certain
  value, and to add a separator.

source/blender/editors/mesh/editmesh_tools.c
source/blender/editors/transform/transform_orientations.c
source/blender/makesrna/RNA_define.h
source/blender/makesrna/intern/rna_define.c

index efb68f69dac8eba4862407e0b615f33dba1be419..6993efefe21cf660df442556eda11021e2a4d96c 100644 (file)
@@ -5796,19 +5796,12 @@ static EnumPropertyItem merge_type_items[]= {
 
 static EnumPropertyItem *merge_type_itemf(bContext *C, PointerRNA *ptr, int *free)
 {      
+       Object *obedit;
        EnumPropertyItem *item= NULL;
        int totitem= 0;
        
-       Object *obedit;
-       
-       if(C==NULL) {
-               /* needed for doc generation */
-               RNA_enum_items_add(&item, &totitem, merge_type_items);
-               RNA_enum_item_end(&item, &totitem);
-               
-               *free= 1;
-               return item;
-       }
+       if(!C) /* needed for docs */
+               return merge_type_items;
        
        obedit= CTX_data_edit_object(C);
        if(obedit && obedit->type == OB_MESH) {
@@ -5817,18 +5810,18 @@ static EnumPropertyItem *merge_type_itemf(bContext *C, PointerRNA *ptr, int *fre
                if(em->selectmode & SCE_SELECT_VERTEX) {
                        if(em->selected.first && em->selected.last &&
                                ((EditSelection*)em->selected.first)->type == EDITVERT && ((EditSelection*)em->selected.last)->type == EDITVERT) {
-                               RNA_enum_item_add(&item, &totitem, &merge_type_items[0]);
-                               RNA_enum_item_add(&item, &totitem, &merge_type_items[1]);
+                               RNA_enum_items_add_value(&item, &totitem, merge_type_items, 6);
+                               RNA_enum_items_add_value(&item, &totitem, merge_type_items, 1);
                        }
                        else if(em->selected.first && ((EditSelection*)em->selected.first)->type == EDITVERT)
-                               RNA_enum_item_add(&item, &totitem, &merge_type_items[1]);
+                               RNA_enum_items_add_value(&item, &totitem, merge_type_items, 1);
                        else if(em->selected.last && ((EditSelection*)em->selected.last)->type == EDITVERT)
-                               RNA_enum_item_add(&item, &totitem, &merge_type_items[0]);
+                               RNA_enum_items_add_value(&item, &totitem, merge_type_items, 6);
                }
 
-               RNA_enum_item_add(&item, &totitem, &merge_type_items[2]);
-               RNA_enum_item_add(&item, &totitem, &merge_type_items[3]);
-               RNA_enum_item_add(&item, &totitem, &merge_type_items[4]);
+               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;
index 6d60c7602f41b916b09ac11947a54793212003a7..605eb6996a5420308c489b5ff25c14e9aab2312a 100644 (file)
@@ -366,7 +366,6 @@ EnumPropertyItem *BIF_enumTransformOrientation(bContext *C)
        EnumPropertyItem normal = {V3D_MANIP_NORMAL, "NORMAL", 0, "Normal", ""};
        EnumPropertyItem local = {V3D_MANIP_LOCAL, "LOCAL", 0, "Local", ""};
        EnumPropertyItem view = {V3D_MANIP_VIEW, "VIEW", 0, "View", ""};
-       EnumPropertyItem sepr = {0, "", 0, NULL, NULL};
        EnumPropertyItem tmp = {0, "", 0, "", ""};
        EnumPropertyItem *item= NULL;
        int i = V3D_MANIP_CUSTOM, totitem= 0;
@@ -386,7 +385,7 @@ EnumPropertyItem *BIF_enumTransformOrientation(bContext *C)
        }
                
        if(ts)
-               RNA_enum_item_add(&item, &totitem, &sepr);
+               RNA_enum_item_add_separator(&item, &totitem);
 
        for(; ts; ts = ts->next) {
                tmp.identifier = "CUSTOM";
index a3fa97bf4b137390baa25e2dd3295dcc7cfc93eb..aeb6c8edf2d1db9be56c17b343cb93421e5748f8 100644 (file)
@@ -164,7 +164,9 @@ void RNA_def_function_ui_description(FunctionRNA *func, const char *description)
  * strings are not freed, assumed pointing to static location. */
 
 void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, EnumPropertyItem *item);
+void RNA_enum_item_add_separator(EnumPropertyItem **items, int *totitem);
 void RNA_enum_items_add(EnumPropertyItem **items, int *totitem, EnumPropertyItem *item);
+void RNA_enum_items_add_value(EnumPropertyItem **items, int *totitem, EnumPropertyItem *item, int value);
 void RNA_enum_item_end(EnumPropertyItem **items, int *totitem);
 
 #ifdef __cplusplus
index 07515d3ad5656dcc4112521555d748999bec6943..b651360eda03499d8daffece890a22695aaec66b 100644 (file)
@@ -2284,12 +2284,25 @@ void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, EnumPropertyItem
        *totitem= tot+1;
 }
 
+void RNA_enum_item_add_separator(EnumPropertyItem **items, int *totitem)
+{
+       static EnumPropertyItem sepr = {0, "", 0, NULL, NULL};
+       RNA_enum_item_add(items, totitem, &sepr);
+}
+
 void RNA_enum_items_add(EnumPropertyItem **items, int *totitem, EnumPropertyItem *item)
 {
        for(; item->identifier; item++)
                RNA_enum_item_add(items, totitem, item);
 }
 
+void RNA_enum_items_add_value(EnumPropertyItem **items, int *totitem, EnumPropertyItem *item, int value)
+{
+       for(; item->identifier; item++)
+               if(item->value == value)
+                       RNA_enum_item_add(items, totitem, item);
+}
+
 void RNA_enum_item_end(EnumPropertyItem **items, int *totitem)
 {
        static EnumPropertyItem empty = {0, NULL, 0, NULL, NULL};