forked from bartvdbraak/blender
Python/RNA: added collection.move(from, to) for python defined
collection properties.
This commit is contained in:
parent
0ef0caaedf
commit
969b4673c7
@ -742,6 +742,7 @@ void RNA_property_pointer_remove(PointerRNA *ptr, PropertyRNA *prop);
|
|||||||
void RNA_property_collection_add(PointerRNA *ptr, PropertyRNA *prop, PointerRNA *r_ptr);
|
void RNA_property_collection_add(PointerRNA *ptr, PropertyRNA *prop, PointerRNA *r_ptr);
|
||||||
int RNA_property_collection_remove(PointerRNA *ptr, PropertyRNA *prop, int key);
|
int RNA_property_collection_remove(PointerRNA *ptr, PropertyRNA *prop, int key);
|
||||||
void RNA_property_collection_clear(PointerRNA *ptr, PropertyRNA *prop);
|
void RNA_property_collection_clear(PointerRNA *ptr, PropertyRNA *prop);
|
||||||
|
int RNA_property_collection_move(PointerRNA *ptr, PropertyRNA *prop, int key, int pos);
|
||||||
|
|
||||||
/* copy/reset */
|
/* copy/reset */
|
||||||
int RNA_property_copy(PointerRNA *ptr, PointerRNA *fromptr, PropertyRNA *prop, int index);
|
int RNA_property_copy(PointerRNA *ptr, PointerRNA *fromptr, PropertyRNA *prop, int index);
|
||||||
|
@ -2172,6 +2172,34 @@ int RNA_property_collection_remove(PointerRNA *ptr, PropertyRNA *prop, int key)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int RNA_property_collection_move(PointerRNA *ptr, PropertyRNA *prop, int key, int pos)
|
||||||
|
{
|
||||||
|
IDProperty *idprop;
|
||||||
|
|
||||||
|
if((idprop=rna_idproperty_check(&prop, ptr))) {
|
||||||
|
IDProperty tmp, *array;
|
||||||
|
int len;
|
||||||
|
|
||||||
|
len= idprop->len;
|
||||||
|
array= IDP_IDPArray(idprop);
|
||||||
|
|
||||||
|
if(key >= 0 && key < len && pos >= 0 && pos < len && key != pos) {
|
||||||
|
memcpy(&tmp, &array[key], sizeof(IDProperty));
|
||||||
|
if(pos < key)
|
||||||
|
memmove(array+pos+1, array+pos, sizeof(IDProperty)*(key - pos));
|
||||||
|
else
|
||||||
|
memmove(array+key, array+key+1, sizeof(IDProperty)*(pos - key));
|
||||||
|
memcpy(&array[pos], &tmp, sizeof(IDProperty));
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else if(prop->flag & PROP_IDPROPERTY)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void RNA_property_collection_clear(PointerRNA *ptr, PropertyRNA *prop)
|
void RNA_property_collection_clear(PointerRNA *ptr, PropertyRNA *prop)
|
||||||
{
|
{
|
||||||
IDProperty *idprop;
|
IDProperty *idprop;
|
||||||
|
@ -2220,6 +2220,27 @@ static PyObject *pyrna_prop_remove(BPy_PropertyRNA *self, PyObject *value)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static PyObject *pyrna_prop_move(BPy_PropertyRNA *self, PyObject *args)
|
||||||
|
{
|
||||||
|
PyObject *ret;
|
||||||
|
int key=0, pos=0;
|
||||||
|
|
||||||
|
if (!PyArg_ParseTuple(args, "ii", &key, &pos)) {
|
||||||
|
PyErr_SetString( PyExc_TypeError, "bpy_prop_collection.move(): expected two ints as arguments");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!RNA_property_collection_move(&self->ptr, self->prop, key, pos)) {
|
||||||
|
PyErr_SetString( PyExc_TypeError, "bpy_prop_collection.move() not supported for this collection");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = Py_None;
|
||||||
|
Py_INCREF(ret);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static PyObject *pyrna_struct_get_id_data(BPy_StructRNA *self)
|
static PyObject *pyrna_struct_get_id_data(BPy_StructRNA *self)
|
||||||
{
|
{
|
||||||
if(self->ptr.id.data) {
|
if(self->ptr.id.data) {
|
||||||
@ -2714,6 +2735,7 @@ static struct PyMethodDef pyrna_prop_collection_methods[] = {
|
|||||||
/* moved into a getset */
|
/* moved into a getset */
|
||||||
{"add", (PyCFunction)pyrna_prop_add, METH_NOARGS, NULL},
|
{"add", (PyCFunction)pyrna_prop_add, METH_NOARGS, NULL},
|
||||||
{"remove", (PyCFunction)pyrna_prop_remove, METH_O, NULL},
|
{"remove", (PyCFunction)pyrna_prop_remove, METH_O, NULL},
|
||||||
|
{"move", (PyCFunction)pyrna_prop_move, METH_VARARGS, NULL},
|
||||||
{NULL, NULL, 0, NULL}
|
{NULL, NULL, 0, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user