diff options
Diffstat (limited to 'source/blender/editors/curve/curve_ops.c')
-rw-r--r-- | source/blender/editors/curve/curve_ops.c | 132 |
1 files changed, 115 insertions, 17 deletions
diff --git a/source/blender/editors/curve/curve_ops.c b/source/blender/editors/curve/curve_ops.c index 4455144c859..30ddb226045 100644 --- a/source/blender/editors/curve/curve_ops.c +++ b/source/blender/editors/curve/curve_ops.c @@ -55,35 +55,95 @@ #include "ED_screen.h" #include "ED_object.h" +#include "BIF_transform.h" + +#include "UI_interface.h" + #include "curve_intern.h" -/* ************************** registration **********************************/ +/**************************** menus *****************************/ +static int specials_menu_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + uiMenuItem *head; + + head= uiPupMenuBegin("Specials", 0); + uiMenuItemO(head, 0, "CURVE_OT_subdivide"); + uiMenuItemO(head, 0, "CURVE_OT_switch_direction"); + uiMenuItemO(head, 0, "CURVE_OT_set_weight"); + uiMenuItemO(head, 0, "CURVE_OT_set_radius"); + uiMenuItemO(head, 0, "CURVE_OT_smooth"); + uiMenuItemO(head, 0, "CURVE_OT_smooth_radius"); + uiPupMenuEnd(C, head); + + return OPERATOR_CANCELLED; +} + +void CURVE_OT_specials_menu(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Specials Menu"; + ot->idname= "CURVE_OT_specials_menu"; + + /* api clastbacks */ + ot->invoke= specials_menu_invoke; + ot->poll= ED_operator_editsurfcurve; +} + +static int add_menu_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + Object *obedit= CTX_data_edit_object(C); + uiMenuItem *head; + + head= uiPupMenuBegin("Add", 0); + if(obedit->type == OB_CURVE) + uiMenuItemsEnumO(head, "CURVE_OT_add_curve_primitive", "type"); + else + uiMenuItemsEnumO(head, "CURVE_OT_add_surface_primitive", "type"); + uiPupMenuEnd(C, head); + + return OPERATOR_CANCELLED; +} + +void CURVE_OT_add_menu(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Add Menu"; + ot->idname= "CURVE_OT_add_menu"; + + /* api clastbacks */ + ot->invoke= add_menu_invoke; + ot->poll= ED_operator_editsurfcurve; +} + +/************************* registration ****************************/ void ED_operatortypes_curve(void) { WM_operatortype_append(FONT_OT_textedit); + WM_operatortype_append(CURVE_OT_hide); + WM_operatortype_append(CURVE_OT_reveal); + WM_operatortype_append(CURVE_OT_separate); - WM_operatortype_append(CURVE_OT_switch_direction); + WM_operatortype_append(CURVE_OT_duplicate); + WM_operatortype_append(CURVE_OT_delete); + WM_operatortype_append(CURVE_OT_set_weight); WM_operatortype_append(CURVE_OT_set_radius); + WM_operatortype_append(CURVE_OT_set_spline_type); + WM_operatortype_append(CURVE_OT_set_handle_type); + WM_operatortype_append(CURVE_OT_set_smooth); + WM_operatortype_append(CURVE_OT_clear_tilt); + WM_operatortype_append(CURVE_OT_smooth); - WM_operatortype_append(CURVE_OT_smooth_curve_radius); + WM_operatortype_append(CURVE_OT_smooth_radius); + WM_operatortype_append(CURVE_OT_de_select_first); WM_operatortype_append(CURVE_OT_de_select_last); WM_operatortype_append(CURVE_OT_de_select_all); - WM_operatortype_append(CURVE_OT_hide); - WM_operatortype_append(CURVE_OT_reveal); - WM_operatortype_append(CURVE_OT_select_invert); - WM_operatortype_append(CURVE_OT_subdivide); - WM_operatortype_append(CURVE_OT_set_spline_type); - WM_operatortype_append(CURVE_OT_make_segment); - WM_operatortype_append(CURVE_OT_spin); - WM_operatortype_append(CURVE_OT_add_vertex); - WM_operatortype_append(CURVE_OT_extrude); - WM_operatortype_append(CURVE_OT_make_cyclic); + WM_operatortype_append(CURVE_OT_select_inverse); WM_operatortype_append(CURVE_OT_select_linked); WM_operatortype_append(CURVE_OT_select_row); WM_operatortype_append(CURVE_OT_select_next); @@ -92,10 +152,20 @@ void ED_operatortypes_curve(void) WM_operatortype_append(CURVE_OT_select_less); WM_operatortype_append(CURVE_OT_select_random); WM_operatortype_append(CURVE_OT_select_every_nth); - WM_operatortype_append(CURVE_OT_add_duplicate); - WM_operatortype_append(CURVE_OT_delete); - WM_operatortype_append(CURVE_OT_set_smooth); - WM_operatortype_append(CURVE_OT_clear_tilt); + + WM_operatortype_append(CURVE_OT_switch_direction); + WM_operatortype_append(CURVE_OT_subdivide); + WM_operatortype_append(CURVE_OT_make_segment); + WM_operatortype_append(CURVE_OT_spin); + WM_operatortype_append(CURVE_OT_add_vertex); + WM_operatortype_append(CURVE_OT_extrude); + WM_operatortype_append(CURVE_OT_toggle_cyclic); + + WM_operatortype_append(CURVE_OT_add_menu); + WM_operatortype_append(CURVE_OT_specials_menu); + + WM_operatortype_append(CURVE_OT_add_surface_primitive); + WM_operatortype_append(CURVE_OT_add_curve_primitive); } void ED_keymap_curve(wmWindowManager *wm) @@ -109,5 +179,33 @@ void ED_keymap_curve(wmWindowManager *wm) keymap= WM_keymap_listbase(wm, "Curve", 0, 0); WM_keymap_add_item(keymap, "OBJECT_OT_curve_add", AKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "CURVE_OT_add_vertex", ACTIONMOUSE, KM_PRESS, KM_CTRL, 0); + + WM_keymap_add_item(keymap, "CURVE_OT_de_select_all", AKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "CURVE_OT_select_row", RKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "CURVE_OT_select_more", PADPLUSKEY, KM_PRESS, KM_CTRL, 0); + WM_keymap_add_item(keymap, "CURVE_OT_select_less", PADMINUS, KM_PRESS, KM_CTRL, 0); + WM_keymap_add_item(keymap, "CURVE_OT_select_linked", LKEY, KM_PRESS, 0, 0); + RNA_boolean_set(WM_keymap_add_item(keymap, "CURVE_OT_select_linked", LKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "deselect", 1); + + WM_keymap_add_item(keymap, "CURVE_OT_separate", PKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "CURVE_OT_extrude", EKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "CURVE_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_add_item(keymap, "CURVE_OT_make_segment", FKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "CURVE_OT_toggle_cyclic", CKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "CURVE_OT_delete", XKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "CURVE_OT_delete", DELKEY, KM_PRESS, 0, 0); + + WM_keymap_add_item(keymap, "CURVE_OT_clear_tilt", TKEY, KM_PRESS, KM_ALT, 0); + RNA_enum_set(WM_keymap_add_item(keymap, "TFM_OT_transform", TKEY, KM_PRESS, 0, 0)->ptr, "mode", TFM_TILT); + RNA_enum_set(WM_keymap_add_item(keymap, "CURVE_OT_set_handle_type", HKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "type", 1); + RNA_enum_set(WM_keymap_add_item(keymap, "CURVE_OT_set_handle_type", HKEY, KM_PRESS, 0, 0)->ptr, "type", 3); + RNA_enum_set(WM_keymap_add_item(keymap, "CURVE_OT_set_handle_type", VKEY, KM_PRESS, 0, 0)->ptr, "type", 2); + + WM_keymap_add_item(keymap, "CURVE_OT_reveal", HKEY, KM_PRESS, KM_ALT, 0); + WM_keymap_add_item(keymap, "CURVE_OT_hide", HKEY, KM_PRESS, KM_ALT|KM_CTRL, 0); + RNA_enum_set(WM_keymap_add_item(keymap, "CURVE_OT_hide", HKEY, KM_PRESS, KM_ALT|KM_SHIFT, 0)->ptr, "deselected", 1); + + WM_keymap_add_item(keymap, "CURVE_OT_specials_menu", WKEY, KM_PRESS, 0, 0); } |