Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Bishop <nicholasbishop@gmail.com>2009-08-21 21:35:35 +0400
committerNicholas Bishop <nicholasbishop@gmail.com>2009-08-21 21:35:35 +0400
commit5280c2884b3395376eec8c9b6f7521375b88f51c (patch)
treea59c9ddf86615f79f9d6c25ad5298390c4a4cc9e /source/blender/editors/object/object_edit.c
parentbc41c845f355c0e4fed427bfa3ab7fc5f7e96660 (diff)
2.5 Object mode:
* Made object mode an enum, shows better in the debugger * Added a toggle mode to the set object mode operator * Toggling a mode on and off goes back to the previous mode, not just object mode * Changed the vertex mode and weight mode shortcuts to call the toggle mode operator
Diffstat (limited to 'source/blender/editors/object/object_edit.c')
-rw-r--r--source/blender/editors/object/object_edit.c27
1 files changed, 21 insertions, 6 deletions
diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c
index 47eaf1757ac..8ac12a5e3a4 100644
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@ -7092,18 +7092,31 @@ static const char *object_mode_op_string(int mode)
static int object_mode_set_exec(bContext *C, wmOperator *op)
{
Object *ob= CTX_data_active_object(C);
- int mode = RNA_enum_get(op->ptr, "mode");
+ ObjectMode mode = RNA_enum_get(op->ptr, "mode");
+ ObjectMode restore_mode = ob->mode;
+ int toggle = RNA_boolean_get(op->ptr, "toggle");
if(!ob)
return OPERATOR_CANCELLED;
- /* Exit off current mode */
- if(ob->mode != OB_MODE_OBJECT)
+ /* Exit current mode if it's not the mode we're setting */
+ if(ob->mode != OB_MODE_OBJECT && ob->mode != mode)
WM_operator_name_call(C, object_mode_op_string(ob->mode), WM_OP_EXEC_REGION_WIN, NULL);
- /* Enter new mode */
- if(mode != OB_MODE_OBJECT)
- WM_operator_name_call(C, object_mode_op_string(mode), WM_OP_EXEC_REGION_WIN, NULL);
+ if(mode != OB_MODE_OBJECT) {
+ /* Enter new mode */
+ if(ob->mode != mode || toggle)
+ WM_operator_name_call(C, object_mode_op_string(mode), WM_OP_EXEC_REGION_WIN, NULL);
+
+ if(toggle) {
+ if(ob->mode == mode)
+ /* For toggling, store old mode so we know what to go back to */
+ ob->restore_mode = restore_mode;
+ else if(ob->restore_mode != OB_MODE_OBJECT && ob->restore_mode != mode) {
+ WM_operator_name_call(C, object_mode_op_string(ob->restore_mode), WM_OP_EXEC_REGION_WIN, NULL);
+ }
+ }
+ }
return OPERATOR_FINISHED;
}
@@ -7127,6 +7140,8 @@ void OBJECT_OT_mode_set(wmOperatorType *ot)
prop= RNA_def_enum(ot->srna, "mode", object_mode_items, 0, "Mode", "");
RNA_def_enum_funcs(prop, object_mode_set_itemsf);
+
+ RNA_def_boolean(ot->srna, "toggle", 0, "Toggle", "");
}