From 77ccb5aec1cc53cd6ab85d3cfc5eb3a073b982b0 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 21 Oct 2009 14:33:52 +0000 Subject: [PATCH] shape key operators and buttons for reordering --- release/scripts/ui/buttons_data_mesh.py | 7 +++ source/blender/editors/object/object_intern.h | 1 + source/blender/editors/object/object_ops.c | 1 + .../blender/editors/object/object_shapekey.c | 60 +++++++++++++++++++ 4 files changed, 69 insertions(+) diff --git a/release/scripts/ui/buttons_data_mesh.py b/release/scripts/ui/buttons_data_mesh.py index 3c8f655f17a..a11fb27e1f6 100644 --- a/release/scripts/ui/buttons_data_mesh.py +++ b/release/scripts/ui/buttons_data_mesh.py @@ -125,6 +125,13 @@ class DATA_PT_shape_keys(DataButtonsPanel): subcol.itemO("object.shape_key_mirror", icon='ICON_MOD_MIRROR', text="") if kb: + + col.itemS() + + subcol = col.column(align=True) + subcol.item_enumO("object.shape_key_move", "type", 'UP', icon='ICON_TRIA_UP', text="") + subcol.item_enumO("object.shape_key_move", "type", 'DOWN', icon='ICON_TRIA_DOWN', text="") + col.itemS() subcol = col.column(align=True) diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h index 8c206ce9d4b..93bbc69eff8 100644 --- a/source/blender/editors/object/object_intern.h +++ b/source/blender/editors/object/object_intern.h @@ -182,6 +182,7 @@ void OBJECT_OT_shape_key_add(struct wmOperatorType *ot); void OBJECT_OT_shape_key_remove(struct wmOperatorType *ot); void OBJECT_OT_shape_key_clear(struct wmOperatorType *ot); void OBJECT_OT_shape_key_mirror(struct wmOperatorType *ot); +void OBJECT_OT_shape_key_move(struct wmOperatorType *ot); /* object_group.c */ void OBJECT_OT_group_add(struct wmOperatorType *ot); diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c index 624825a18ac..9e1811fe158 100644 --- a/source/blender/editors/object/object_ops.c +++ b/source/blender/editors/object/object_ops.c @@ -178,6 +178,7 @@ void ED_operatortypes_object(void) WM_operatortype_append(OBJECT_OT_shape_key_remove); WM_operatortype_append(OBJECT_OT_shape_key_clear); WM_operatortype_append(OBJECT_OT_shape_key_mirror); + WM_operatortype_append(OBJECT_OT_shape_key_move); WM_operatortype_append(LATTICE_OT_select_all_toggle); WM_operatortype_append(LATTICE_OT_make_regular); diff --git a/source/blender/editors/object/object_shapekey.c b/source/blender/editors/object/object_shapekey.c index 61ea9ab44a0..53970596f55 100644 --- a/source/blender/editors/object/object_shapekey.c +++ b/source/blender/editors/object/object_shapekey.c @@ -660,3 +660,63 @@ void OBJECT_OT_shape_key_mirror(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } + +static int shape_key_move_exec(bContext *C, wmOperator *op) +{ + Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; + + int type= RNA_enum_get(op->ptr, "type"); + Key *key= ob_get_key(ob); + + if(key) { + KeyBlock *kb, *kb_other; + kb= BLI_findlink(&key->block, ob->shapenr-1); + + if(type==-1) { + /* move back */ + if(kb->prev) { + kb_other= kb->prev; + BLI_remlink(&key->block, kb); + BLI_insertlinkbefore(&key->block, kb_other, kb); + ob->shapenr--; + } + } + else { + /* move next */ + if(kb->next) { + kb_other= kb->next; + BLI_remlink(&key->block, kb); + BLI_insertlinkafter(&key->block, kb_other, kb); + ob->shapenr++; + } + } + } + + DAG_id_flush_update(&ob->id, OB_RECALC_DATA); + WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + + return OPERATOR_FINISHED; +} + +void OBJECT_OT_shape_key_move(wmOperatorType *ot) +{ + static EnumPropertyItem slot_move[] = { + {-1, "UP", 0, "Up", ""}, + {1, "DOWN", 0, "Down", ""}, + {0, NULL, 0, NULL, NULL} + }; + + /* identifiers */ + ot->name= "Move Shape Key"; + ot->idname= "OBJECT_OT_shape_key_move"; + + /* api callbacks */ + ot->poll= shape_key_poll; + ot->exec= shape_key_move_exec; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + RNA_def_enum(ot->srna, "type", slot_move, 0, "Type", ""); +} +