Undo revision 23130 which was a merge with 2.5, a messy one because I did something...
[blender.git] / source / blender / editors / interface / interface_layout.c
index bf449db..fc4f7da 100644 (file)
@@ -310,30 +310,6 @@ static uiLayout *ui_item_local_sublayout(uiLayout *test, uiLayout *layout, int a
        return sub;
 }
 
-static void ui_layer_but_cb(bContext *C, void *arg_but, void *arg_index)
-{
-       wmWindow *win= CTX_wm_window(C);
-       uiBut *but= arg_but, *cbut;
-       PointerRNA *ptr= &but->rnapoin;
-       PropertyRNA *prop= but->rnaprop;
-       int i, index= GET_INT_FROM_POINTER(arg_index);
-       int shift= win->eventstate->shift;
-       int len= RNA_property_array_length(ptr, prop);
-
-       if(!shift) {
-               RNA_property_boolean_set_index(ptr, prop, index, 1);
-
-               for(i=0; i<len; i++)
-                       if(i != index)
-                               RNA_property_boolean_set_index(ptr, prop, i, 0);
-
-               RNA_property_update(C, ptr, prop);
-
-               for(cbut=but->block->buttons.first; cbut; cbut=cbut->next)
-                       ui_check_but(cbut);
-       }
-}
-
 /* create buttons for an item with an RNA array */
 static void ui_item_array(uiLayout *layout, uiBlock *block, char *name, int icon, PointerRNA *ptr, PropertyRNA *prop, int len, int x, int y, int w, int h, int expand, int slider)
 {
@@ -342,7 +318,7 @@ static void ui_item_array(uiLayout *layout, uiBlock *block, char *name, int icon
        PropertyType type;
        PropertySubType subtype;
        uiLayout *sub;
-       int a, b;
+       int a;
 
        /* retrieve type and subtype */
        type= RNA_property_type(prop);
@@ -356,11 +332,9 @@ static void ui_item_array(uiLayout *layout, uiBlock *block, char *name, int icon
                uiDefBut(block, LABEL, 0, name, 0, 0, w, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 0, "");
 
        /* create buttons */
-       if(type == PROP_BOOLEAN && ELEM(subtype, PROP_LAYER, PROP_LAYER_MEMBER)) {
+       if(type == PROP_BOOLEAN && len == 20) {
                /* special check for layer layout */
                int butw, buth, unit;
-               int cols= (len >= 20)? 2: 1;
-               int colbuts= len/(2*cols);
 
                uiBlockSetCurLayout(block, uiLayoutFree(layout, 0));
 
@@ -368,23 +342,21 @@ static void ui_item_array(uiLayout *layout, uiBlock *block, char *name, int icon
                butw= unit;
                buth= unit;
 
-               for(b=0; b<cols; b++) {
-                       uiBlockBeginAlign(block);
+               uiBlockBeginAlign(block);
+               for(a=0; a<5; a++)
+                       uiDefAutoButR(block, ptr, prop, a, "", ICON_BLANK1, x + butw*a, y+buth, butw, buth);
+               for(a=0; a<5; a++)
+                       uiDefAutoButR(block, ptr, prop, a+10, "", ICON_BLANK1, x + butw*a, y, butw, buth);
+               uiBlockEndAlign(block);
 
-                       for(a=0; a<colbuts; a++) {
-                               but= uiDefAutoButR(block, ptr, prop, a+b*colbuts, "", ICON_BLANK1, x + butw*a, y+buth, butw, buth);
-                               if(subtype == PROP_LAYER_MEMBER)
-                                       uiButSetFunc(but, ui_layer_but_cb, but, SET_INT_IN_POINTER(a+b*colbuts));
-                       }
-                       for(a=0; a<colbuts; a++) {
-                               but= uiDefAutoButR(block, ptr, prop, a+len/2+b*colbuts, "", ICON_BLANK1, x + butw*a, y, butw, buth);
-                               if(subtype == PROP_LAYER_MEMBER)
-                                       uiButSetFunc(but, ui_layer_but_cb, but, SET_INT_IN_POINTER(a+len/2+b*colbuts));
-                       }
-                       uiBlockEndAlign(block);
+               x += 5*butw + style->buttonspacex;
 
-                       x += colbuts*butw + style->buttonspacex;
-               }
+               uiBlockBeginAlign(block);
+               for(a=0; a<5; a++)
+                       uiDefAutoButR(block, ptr, prop, a+5, "", ICON_BLANK1, x + butw*a, y+buth, butw, buth);
+               for(a=0; a<5; a++)
+                       uiDefAutoButR(block, ptr, prop, a+15, "", ICON_BLANK1, x + butw*a, y, butw, buth);
+               uiBlockEndAlign(block);
        }
        else if(subtype == PROP_MATRIX) {
                /* matrix layout */
@@ -443,7 +415,7 @@ static void ui_item_array(uiLayout *layout, uiBlock *block, char *name, int icon
        uiBlockSetCurLayout(block, layout);
 }
 
-static void ui_item_enum_row(uiLayout *layout, uiBlock *block, PointerRNA *ptr, PropertyRNA *prop, char *uiname, int x, int y, int w, int h, int icon_only)
+static void ui_item_enum_row(uiLayout *layout, uiBlock *block, PointerRNA *ptr, PropertyRNA *prop, char *uiname, int x, int y, int w, int h)
 {
        EnumPropertyItem *item;
        const char *identifier;
@@ -463,7 +435,7 @@ static void ui_item_enum_row(uiLayout *layout, uiBlock *block, PointerRNA *ptr,
                value= item[a].value;
                itemw= ui_text_icon_width(block->curlayout, name, icon, 0);
 
-               if(icon && strcmp(name, "") != 0 && !icon_only)
+               if(icon && strcmp(name, "") != 0)
                        uiDefIconTextButR(block, ROW, 0, icon, name, 0, 0, itemw, h, ptr, identifier, -1, 0, value, -1, -1, NULL);
                else if(icon)
                        uiDefIconButR(block, ROW, 0, icon, 0, 0, itemw, h, ptr, identifier, -1, 0, value, -1, -1, NULL);
@@ -477,7 +449,7 @@ static void ui_item_enum_row(uiLayout *layout, uiBlock *block, PointerRNA *ptr,
 }
 
 /* create label + button for RNA property */
-static uiBut *ui_item_with_label(uiLayout *layout, uiBlock *block, char *name, int icon, PointerRNA *ptr, PropertyRNA *prop, int index, int x, int y, int w, int h, int icon_only)
+static uiBut *ui_item_with_label(uiLayout *layout, uiBlock *block, char *name, int icon, PointerRNA *ptr, PropertyRNA *prop, int index, int x, int y, int w, int h)
 {
        uiLayout *sub;
        uiBut *but;
@@ -506,7 +478,7 @@ static uiBut *ui_item_with_label(uiLayout *layout, uiBlock *block, char *name, i
                but= uiDefIconButO(block, BUT, "BUTTONS_OT_file_browse", WM_OP_INVOKE_DEFAULT, ICON_FILESEL, x, y, UI_UNIT_X, h, "Browse for file or directory.");
        }
        else
-               but= uiDefAutoButR(block, ptr, prop, index, (icon_only)? "": NULL, icon, x, y, w, h);
+               but= uiDefAutoButR(block, ptr, prop, index, "", icon, x, y, w, h);
 
        uiBlockSetCurLayout(block, layout);
        return but;
@@ -563,7 +535,7 @@ static void ui_item_disabled(uiLayout *layout, char *name)
 }
 
 /* operator items */
-PointerRNA uiItemFullO(uiLayout *layout, char *name, int icon, char *idname, IDProperty *properties, int context, int flag)
+void uiItemFullO(uiLayout *layout, char *name, int icon, char *idname, IDProperty *properties, int context)
 {
        uiBlock *block= layout->root->block;
        wmOperatorType *ot= WM_operatortype_find(idname, 0);
@@ -572,7 +544,7 @@ PointerRNA uiItemFullO(uiLayout *layout, char *name, int icon, char *idname, IDP
 
        if(!ot) {
                ui_item_disabled(layout, idname);
-               return PointerRNA_NULL;
+               return;
        }
 
        if(!name)
@@ -593,21 +565,10 @@ PointerRNA uiItemFullO(uiLayout *layout, char *name, int icon, char *idname, IDP
                but= uiDefButO(block, BUT, ot->idname, context, (char*)name, 0, 0, w, UI_UNIT_Y, NULL);
 
        /* assign properties */
-       if(properties || (flag & UI_ITEM_O_RETURN_PROPS)) {
+       if(properties) {
                PointerRNA *opptr= uiButGetOperatorPtrRNA(but);
-
-               if(properties) {
-                       opptr->data= properties;
-               }
-               else {
-                       IDPropertyTemplate val = {0};
-                       opptr->data= IDP_New(IDP_GROUP, val, "wmOperatorProperties");
-               }
-
-               return *opptr;
+               opptr->data= properties;
        }
-
-       return PointerRNA_NULL;
 }
 
 static char *ui_menu_enumpropname(uiLayout *layout, char *opname, char *propname, int retval)
@@ -650,7 +611,7 @@ void uiItemEnumO(uiLayout *layout, char *name, int icon, char *opname, char *pro
        if(!name)
                name= ui_menu_enumpropname(layout, opname, propname, value);
 
-       uiItemFullO(layout, name, icon, opname, ptr.data, layout->root->opcontext, 0);
+       uiItemFullO(layout, name, icon, opname, ptr.data, layout->root->opcontext);
 }
 
 void uiItemsEnumO(uiLayout *layout, char *opname, char *propname)
@@ -658,8 +619,6 @@ void uiItemsEnumO(uiLayout *layout, char *opname, char *propname)
        wmOperatorType *ot= WM_operatortype_find(opname, 0);
        PointerRNA ptr;
        PropertyRNA *prop;
-       uiBut *bt;
-       uiBlock *block= layout->root->block;
 
        if(!ot || !ot->srna) {
                ui_item_disabled(layout, opname);
@@ -672,31 +631,14 @@ void uiItemsEnumO(uiLayout *layout, char *opname, char *propname)
        if(prop && RNA_property_type(prop) == PROP_ENUM) {
                EnumPropertyItem *item;
                int totitem, i, free;
-               uiLayout *split= uiLayoutSplit(layout, 0);
-               uiLayout *column= uiLayoutColumn(split, 0);
-
-               RNA_property_enum_items(block->evil_C, &ptr, prop, &item, &totitem, &free);
 
-               for(i=0; i<totitem; i++) {
-                       if(item[i].identifier[0]) {
-                               uiItemEnumO(column, (char*)item[i].name, item[i].icon, opname, propname, item[i].value);
-                       }
-                       else {
-                               if(item[i].name) {
-                                       if(i != 0) {
-                                               column= uiLayoutColumn(split, 0);
-                                               /* inconsistent, but menus with labels do not look good flipped */
-                                               block->flag |= UI_BLOCK_NO_FLIP;
-                                       }
+               RNA_property_enum_items(layout->root->block->evil_C, &ptr, prop, &item, &totitem, &free);
 
-                                       uiItemL(column, (char*)item[i].name, 0);
-                                       bt= block->buttons.last;
-                                       bt->flag= UI_TEXT_LEFT;
-                               }
-                               else
-                                       uiItemS(column);
-                       }
-               }
+               for(i=0; i<totitem; i++)
+                       if(item[i].identifier[0])
+                               uiItemEnumO(layout, (char*)item[i].name, item[i].icon, opname, propname, item[i].value);
+                       else
+                               uiItemS(layout);
 
                if(free)
                        MEM_freeN(item);
@@ -738,7 +680,7 @@ void uiItemEnumO_string(uiLayout *layout, char *name, int icon, char *opname, ch
        if(!name)
                name= ui_menu_enumpropname(layout, opname, propname, value);
 
-       uiItemFullO(layout, name, icon, opname, ptr.data, layout->root->opcontext, 0);
+       uiItemFullO(layout, name, icon, opname, ptr.data, layout->root->opcontext);
 }
 
 void uiItemBooleanO(uiLayout *layout, char *name, int icon, char *opname, char *propname, int value)
@@ -748,7 +690,7 @@ void uiItemBooleanO(uiLayout *layout, char *name, int icon, char *opname, char *
        WM_operator_properties_create(&ptr, opname);
        RNA_boolean_set(&ptr, propname, value);
 
-       uiItemFullO(layout, name, icon, opname, ptr.data, layout->root->opcontext, 0);
+       uiItemFullO(layout, name, icon, opname, ptr.data, layout->root->opcontext);
 }
 
 void uiItemIntO(uiLayout *layout, char *name, int icon, char *opname, char *propname, int value)
@@ -758,7 +700,7 @@ void uiItemIntO(uiLayout *layout, char *name, int icon, char *opname, char *prop
        WM_operator_properties_create(&ptr, opname);
        RNA_int_set(&ptr, propname, value);
 
-       uiItemFullO(layout, name, icon, opname, ptr.data, layout->root->opcontext, 0);
+       uiItemFullO(layout, name, icon, opname, ptr.data, layout->root->opcontext);
 }
 
 void uiItemFloatO(uiLayout *layout, char *name, int icon, char *opname, char *propname, float value)
@@ -768,7 +710,7 @@ void uiItemFloatO(uiLayout *layout, char *name, int icon, char *opname, char *pr
        WM_operator_properties_create(&ptr, opname);
        RNA_float_set(&ptr, propname, value);
 
-       uiItemFullO(layout, name, icon, opname, ptr.data, layout->root->opcontext, 0);
+       uiItemFullO(layout, name, icon, opname, ptr.data, layout->root->opcontext);
 }
 
 void uiItemStringO(uiLayout *layout, char *name, int icon, char *opname, char *propname, char *value)
@@ -778,17 +720,17 @@ void uiItemStringO(uiLayout *layout, char *name, int icon, char *opname, char *p
        WM_operator_properties_create(&ptr, opname);
        RNA_string_set(&ptr, propname, value);
 
-       uiItemFullO(layout, name, icon, opname, ptr.data, layout->root->opcontext, 0);
+       uiItemFullO(layout, name, icon, opname, ptr.data, layout->root->opcontext);
 }
 
 void uiItemO(uiLayout *layout, char *name, int icon, char *opname)
 {
-       uiItemFullO(layout, name, icon, opname, NULL, layout->root->opcontext, 0);
+       uiItemFullO(layout, name, icon, opname, NULL, layout->root->opcontext);
 }
 
 /* RNA property items */
 
-static void ui_item_rna_size(uiLayout *layout, char *name, int icon, PointerRNA *ptr, PropertyRNA *prop, int index, int icon_only, int *r_w, int *r_h)
+static void ui_item_rna_size(uiLayout *layout, char *name, int icon, PropertyRNA *prop, int index, int *r_w, int *r_h)
 {
        PropertyType type;
        PropertySubType subtype;
@@ -797,11 +739,11 @@ static void ui_item_rna_size(uiLayout *layout, char *name, int icon, PointerRNA
        /* arbitrary extended width by type */
        type= RNA_property_type(prop);
        subtype= RNA_property_subtype(prop);
-       len= RNA_property_array_length(ptr, prop);
+       len= RNA_property_array_length(prop);
 
-       if(ELEM3(type, PROP_STRING, PROP_POINTER, PROP_ENUM) && !name[0] && !icon_only)
+       if(ELEM3(type, PROP_STRING, PROP_POINTER, PROP_ENUM) && !name[0])
                name= "non-empty text";
-       else if(type == PROP_BOOLEAN && !name[0] && !icon_only)
+       else if(type == PROP_BOOLEAN && !name[0])
                icon= ICON_DOT;
 
        w= ui_text_icon_width(layout, name, icon, 0);
@@ -812,7 +754,7 @@ static void ui_item_rna_size(uiLayout *layout, char *name, int icon, PointerRNA
                if(!name[0] && icon == 0)
                        h= 0;
 
-               if(ELEM(subtype, PROP_LAYER, PROP_LAYER_MEMBER))
+               if(type == PROP_BOOLEAN && len == 20)
                        h += 2*UI_UNIT_Y;
                else if(subtype == PROP_MATRIX)
                        h += ceil(sqrt(len))*UI_UNIT_Y;
@@ -821,24 +763,24 @@ static void ui_item_rna_size(uiLayout *layout, char *name, int icon, PointerRNA
        }
        else if(ui_layout_vary_direction(layout) == UI_ITEM_VARY_X) {
                if(type == PROP_BOOLEAN && strcmp(name, "") != 0)
-                       w += UI_UNIT_X/5;
+                       w += UI_UNIT_X;
                else if(type == PROP_ENUM)
-                       w += UI_UNIT_X/4;
+                       w += UI_UNIT_X/2;
                else if(type == PROP_FLOAT || type == PROP_INT)
-                       w += UI_UNIT_X*3;
+                       w += UI_UNIT_X*2;
        }
 
        *r_w= w;
        *r_h= h;
 }
 
-void uiItemFullR(uiLayout *layout, char *name, int icon, PointerRNA *ptr, PropertyRNA *prop, int index, int value, int flag)
+void uiItemFullR(uiLayout *layout, char *name, int icon, PointerRNA *ptr, PropertyRNA *prop, int index, int value, int expand, int slider, int toggle)
 {
        uiBlock *block= layout->root->block;
        uiBut *but;
        PropertyType type;
        char namestr[UI_MAX_NAME_STR];
-       int len, w, h, slider, toggle, expand, icon_only;
+       int len, w, h;
 
        if(!ptr->data || !prop)
                return;
@@ -847,7 +789,7 @@ void uiItemFullR(uiLayout *layout, char *name, int icon, PointerRNA *ptr, Proper
 
        /* retrieve info */
        type= RNA_property_type(prop);
-       len= RNA_property_array_length(ptr, prop);
+       len= RNA_property_array_length(prop);
 
        /* set name and icon */
        if(!name)
@@ -869,13 +811,8 @@ void uiItemFullR(uiLayout *layout, char *name, int icon, PointerRNA *ptr, Proper
                        icon= (RNA_property_enum_get(ptr, prop) == value)? ICON_CHECKBOX_HLT: ICON_CHECKBOX_DEHLT; 
        }
 
-       slider= (flag & UI_ITEM_R_SLIDER);
-       toggle= (flag & UI_ITEM_R_TOGGLE);
-       expand= (flag & UI_ITEM_R_EXPAND);
-       icon_only= (flag & UI_ITEM_R_ICON_ONLY);
-
        /* get size */
-       ui_item_rna_size(layout, name, icon, ptr, prop, index, icon_only, &w, &h);
+       ui_item_rna_size(layout, name, icon, prop, index, &w, &h);
 
        /* array property */
        if(index == RNA_NO_INDEX && len > 0)
@@ -884,7 +821,7 @@ void uiItemFullR(uiLayout *layout, char *name, int icon, PointerRNA *ptr, Proper
        else if(type == PROP_ENUM && index == RNA_ENUM_VALUE) {
                char *identifier= (char*)RNA_property_identifier(prop);
 
-               if(icon && strcmp(name, "") != 0 && !icon_only)
+               if(icon && strcmp(name, "") != 0)
                        uiDefIconTextButR(block, ROW, 0, icon, name, 0, 0, w, h, ptr, identifier, -1, 0, value, -1, -1, NULL);
                else if(icon)
                        uiDefIconButR(block, ROW, 0, icon, 0, 0, w, h, ptr, identifier, -1, 0, value, -1, -1, NULL);
@@ -893,10 +830,10 @@ void uiItemFullR(uiLayout *layout, char *name, int icon, PointerRNA *ptr, Proper
        }
        /* expanded enum */
        else if(type == PROP_ENUM && expand)
-               ui_item_enum_row(layout, block, ptr, prop, name, 0, 0, w, h, icon_only);
+               ui_item_enum_row(layout, block, ptr, prop, name, 0, 0, w, h);
        /* property with separate label */
        else if(type == PROP_ENUM || type == PROP_STRING || type == PROP_POINTER) {
-               but= ui_item_with_label(layout, block, name, icon, ptr, prop, index, 0, 0, w, h, icon_only);
+               but= ui_item_with_label(layout, block, name, icon, ptr, prop, index, 0, 0, w, h);
                ui_but_add_search(but, ptr, prop, NULL, NULL);
        }
        /* single button */
@@ -911,7 +848,7 @@ void uiItemFullR(uiLayout *layout, char *name, int icon, PointerRNA *ptr, Proper
        }
 }
 
-void uiItemR(uiLayout *layout, char *name, int icon, PointerRNA *ptr, char *propname, int flag)
+void uiItemR(uiLayout *layout, char *name, int icon, PointerRNA *ptr, char *propname, int expand, int slider, int toggle)
 {
        PropertyRNA *prop;
 
@@ -926,7 +863,7 @@ void uiItemR(uiLayout *layout, char *name, int icon, PointerRNA *ptr, char *prop
                return;
        }
 
-       uiItemFullR(layout, name, icon, ptr, prop, RNA_NO_INDEX, 0, flag);
+       uiItemFullR(layout, name, icon, ptr, prop, RNA_NO_INDEX, 0, expand, slider, toggle);
 }
 
 void uiItemEnumR(uiLayout *layout, char *name, int icon, struct PointerRNA *ptr, char *propname, int value)
@@ -944,7 +881,7 @@ void uiItemEnumR(uiLayout *layout, char *name, int icon, struct PointerRNA *ptr,
                return;
        }
 
-       uiItemFullR(layout, name, icon, ptr, prop, RNA_ENUM_VALUE, value, 0);
+       uiItemFullR(layout, name, icon, ptr, prop, RNA_ENUM_VALUE, value, 0, 0, 0);
 }
 
 void uiItemEnumR_string(uiLayout *layout, char *name, int icon, struct PointerRNA *ptr, char *propname, char *value)
@@ -975,7 +912,7 @@ void uiItemEnumR_string(uiLayout *layout, char *name, int icon, struct PointerRN
 
        for(a=0; item[a].identifier; a++) {
                if(item[a].value == ivalue) {
-                       uiItemFullR(layout, (char*)item[a].name, item[a].icon, ptr, prop, RNA_ENUM_VALUE, ivalue, 0);
+                       uiItemFullR(layout, (char*)item[a].name, item[a].icon, ptr, prop, RNA_ENUM_VALUE, ivalue, 0, 0, 0);
                        break;
                }
        }
@@ -987,8 +924,6 @@ void uiItemEnumR_string(uiLayout *layout, char *name, int icon, struct PointerRN
 void uiItemsEnumR(uiLayout *layout, struct PointerRNA *ptr, char *propname)
 {
        PropertyRNA *prop;
-       uiBlock *block= layout->root->block;
-       uiBut *bt;
 
        prop= RNA_struct_find_property(ptr, propname);
 
@@ -1000,31 +935,14 @@ void uiItemsEnumR(uiLayout *layout, struct PointerRNA *ptr, char *propname)
        if(RNA_property_type(prop) == PROP_ENUM) {
                EnumPropertyItem *item;
                int totitem, i, free;
-               uiLayout *split= uiLayoutSplit(layout, 0);
-               uiLayout *column= uiLayoutColumn(split, 0);
-
-               RNA_property_enum_items(block->evil_C, ptr, prop, &item, &totitem, &free);
 
-               for(i=0; i<totitem; i++) {
-                       if(item[i].identifier[0]) {
-                               uiItemEnumR(column, (char*)item[i].name, 0, ptr, propname, item[i].value);
-                       }
-                       else {
-                               if(item[i].name) {
-                                       if(i != 0) {
-                                               column= uiLayoutColumn(split, 0);
-                                               /* inconsistent, but menus with labels do not look good flipped */
-                                               block->flag |= UI_BLOCK_NO_FLIP;
-                                       }
+               RNA_property_enum_items(layout->root->block->evil_C, ptr, prop, &item, &totitem, &free);
 
-                                       uiItemL(column, (char*)item[i].name, 0);
-                                       bt= block->buttons.last;
-                                       bt->flag= UI_TEXT_LEFT;
-                               }
-                               else
-                                       uiItemS(column);
-                       }
-               }
+               for(i=0; i<totitem; i++)
+                       if(item[i].identifier[0])
+                               uiItemEnumR(layout, (char*)item[i].name, 0, ptr, propname, item[i].value);
+                       else
+                               uiItemS(layout);
 
                if(free)
                        MEM_freeN(item);
@@ -1161,8 +1079,8 @@ void uiItemPointerR(uiLayout *layout, char *name, int icon, struct PointerRNA *p
        /* create button */
        block= uiLayoutGetBlock(layout);
 
-       ui_item_rna_size(layout, name, icon, ptr, prop, 0, 0, &w, &h);
-       but= ui_item_with_label(layout, block, name, icon, ptr, prop, 0, 0, 0, w, h, 0);
+       ui_item_rna_size(layout, name, icon, prop, 0, &w, &h);
+       but= ui_item_with_label(layout, block, name, icon, ptr, prop, 0, 0, 0, w, h);
 
        ui_but_add_search(but, ptr, prop, searchptr, searchprop);
 }