From cd154da9732962870339952898499ed1b1c32d93 Mon Sep 17 00:00:00 2001 From: Martin Poirier Date: Sun, 29 Nov 2009 22:16:29 +0000 Subject: 1. Extend option for 3d view border select now does something (default True to keep same behavior) 2. Add action parameter to Select_All_Toggle operators, rename to Select_All. Options are Toggle (default), Select, Deselect, Invert (same as select swap). This makes it possible to map separate hotkeys for select all and deselect all. NOTE for Aligorith: I didn't change animation operators for select_all which already had an Invert operator. These should be fixed eventually. --- source/blender/editors/metaball/mball_edit.c | 46 ++++++++++++++++++---------- 1 file changed, 30 insertions(+), 16 deletions(-) (limited to 'source/blender/editors/metaball/mball_edit.c') diff --git a/source/blender/editors/metaball/mball_edit.c b/source/blender/editors/metaball/mball_edit.c index 09200514c0f..d4ad833d11e 100644 --- a/source/blender/editors/metaball/mball_edit.c +++ b/source/blender/editors/metaball/mball_edit.c @@ -189,49 +189,63 @@ MetaElem *add_metaball_primitive(bContext *C, int type, int newname) /***************************** Select/Deselect operator *****************************/ /* Select or deselect all MetaElements */ -static int select_deselect_all_metaelems_exec(bContext *C, wmOperator *op) +static int select_all_exec(bContext *C, wmOperator *op) { //Scene *scene= CTX_data_scene(C); Object *obedit= CTX_data_edit_object(C); MetaBall *mb = (MetaBall*)obedit->data; MetaElem *ml; - int any_sel= 0; - - /* Is any metaelem selected? */ + int action = RNA_enum_get(op->ptr, "action"); + ml= mb->editelems->first; if(ml) { - while(ml) { - if(ml->flag & SELECT) break; - ml= ml->next; + if (action == SEL_TOGGLE) { + action = SEL_SELECT; + while(ml) { + if(ml->flag & SELECT) { + action = SEL_DESELECT; + break; + } + ml= ml->next; + } } - if(ml) any_sel= 1; ml= mb->editelems->first; while(ml) { - if(any_sel) ml->flag &= ~SELECT; - else ml->flag |= SELECT; + switch (action) { + case SEL_SELECT: + ml->flag |= SELECT; + break; + case SEL_DESELECT: + ml->flag &= ~SELECT; + break; + case SEL_INVERT: + ml->flag ^= SELECT; + break; + } ml= ml->next; } WM_event_add_notifier(C, NC_GEOM|ND_SELECT, mb); - //DAG_id_flush_update(obedit->data, OB_RECALC_DATA); } return OPERATOR_FINISHED; } -void MBALL_OT_select_deselect_all_metaelems(wmOperatorType *ot) +void MBALL_OT_select_all(wmOperatorType *ot) { /* identifiers */ ot->name= "Select/Deselect All"; - ot->description= "(de)select all metaelements."; - ot->idname= "MBALL_OT_select_deselect_all_metaelems"; + ot->description= "Change selection of all meta elements."; + ot->idname= "MBALL_OT_select_all"; /* callback functions */ - ot->exec= select_deselect_all_metaelems_exec; + ot->exec= select_all_exec; ot->poll= ED_operator_editmball; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + WM_operator_properties_select_all(ot); } /***************************** Select inverse operator *****************************/ -- cgit v1.2.3