From be5cd1596d695febcbd89ba598084ffdb06e2025 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Fri, 20 Feb 2009 18:01:33 +0000 Subject: [PATCH] 2.5 View3d: - using layerbuttons in header allows SHIFT for extend - added operator for layer hotkeys, works as for 2.4x --- .../editors/space_view3d/view3d_header.c | 70 ++++++++++++++++++- .../editors/space_view3d/view3d_intern.h | 1 + .../blender/editors/space_view3d/view3d_ops.c | 13 ++++ 3 files changed, 83 insertions(+), 1 deletion(-) diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index f30d2f2231f..5fc93304e5d 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -76,6 +76,9 @@ #include "WM_api.h" #include "WM_types.h" +#include "RNA_access.h" +#include "RNA_define.h" + #include "BIF_gl.h" #include "BIF_glutil.h" #include "BIF_transform.h" @@ -249,6 +252,70 @@ void do_layer_buttons(bContext *C, short event) if(v3d->drawtype == OB_SHADED) reshadeall_displist(scene); } +static int layers_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + ScrArea *sa= CTX_wm_area(C); + View3D *v3d= sa->spacedata.first; + int nr= RNA_int_get(op->ptr, "nr"); + + if(nr<=0) + return OPERATOR_CANCELLED; + nr--; + + if(RNA_boolean_get(op->ptr, "extend")) + v3d->lay |= (1<lay = (1<scenelock) handle_view3d_lock(); + + /* new layers might need unflushed events events */ + DAG_scene_update_flags(scene, v3d->lay); /* tags all that moves and flushes */ + + ED_area_tag_redraw(sa); + + return OPERATOR_FINISHED; +} + +/* applies shift and alt, lazy coding or ok? :) */ +/* the local per-keymap-entry keymap will solve it */ +static int layers_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + if(event->ctrl || event->oskey) + return OPERATOR_PASS_THROUGH; + + if(event->shift) + RNA_boolean_set(op->ptr, "extend", 1); + + if(event->alt) { + int nr= RNA_int_get(op->ptr, "nr") + 10; + RNA_int_set(op->ptr, "nr", nr); + } + layers_exec(C, op); + + return OPERATOR_FINISHED; +} + +void VIEW3D_OT_layers(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Layers"; + ot->idname= "VIEW3D_OT_layers"; + + /* api callbacks */ + ot->invoke= layers_invoke; + ot->exec= layers_exec; + ot->poll= ED_operator_view3d_active; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + RNA_def_int(ot->srna, "nr", 1, 0, 20, "Number", "", 0, 20); + RNA_def_boolean(ot->srna, "extend", 0, "Extend", ""); +} + + #if 0 static void do_view3d_view_camerasmenu(bContext *C, void *arg, int event) { @@ -4937,6 +5004,7 @@ static char *propfalloff_pup(void) static void do_view3d_header_buttons(bContext *C, void *arg, int event) { + wmWindow *win= CTX_wm_window(C); Scene *scene= CTX_data_scene(C); ScrArea *sa= CTX_wm_area(C); View3D *v3d= sa->spacedata.first; @@ -4944,7 +5012,7 @@ static void do_view3d_header_buttons(bContext *C, void *arg, int event) Object *ob= CTX_data_active_object(C); Object *obedit = CTX_data_edit_object(C); EditMesh *em= NULL; - int bit, ctrl=0, shift=0; // XXX shift arg? + int bit, ctrl= win->eventstate->ctrl, shift= win->eventstate->shift; if(obedit && obedit->type==OB_MESH) { em= ((Mesh *)obedit->data)->edit_mesh; diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index 123f8674033..6e26a9a7ad8 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -55,6 +55,7 @@ struct ViewContext; /* view3d_header.c */ void view3d_header_buttons(const struct bContext *C, struct ARegion *ar); +void VIEW3D_OT_layers(struct wmOperatorType *ot); /* view3d_ops.c */ void view3d_operatortypes(void); diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c index f18b3c64cf8..6d071056b78 100644 --- a/source/blender/editors/space_view3d/view3d_ops.c +++ b/source/blender/editors/space_view3d/view3d_ops.c @@ -86,6 +86,7 @@ void view3d_operatortypes(void) WM_operatortype_append(VIEW3D_OT_editmesh_face_toolbox); WM_operatortype_append(VIEW3D_OT_properties); WM_operatortype_append(VIEW3D_OT_localview); + WM_operatortype_append(VIEW3D_OT_layers); WM_operatortype_append(VIEW3D_OT_snap_selected_to_grid); WM_operatortype_append(VIEW3D_OT_snap_selected_to_cursor); @@ -160,6 +161,18 @@ void view3d_keymap(wmWindowManager *wm) WM_keymap_add_item(keymap, "VIEW3D_OT_localview", PADSLASHKEY, KM_PRESS, 0, 0); + /* layers, shift + alt are properties set in invoke() */ + RNA_int_set(WM_keymap_add_item(keymap, "VIEW3D_OT_layers", ONEKEY, KM_PRESS, KM_ANY, 0)->ptr, "nr", 1); + RNA_int_set(WM_keymap_add_item(keymap, "VIEW3D_OT_layers", TWOKEY, KM_PRESS, KM_ANY, 0)->ptr, "nr", 2); + RNA_int_set(WM_keymap_add_item(keymap, "VIEW3D_OT_layers", THREEKEY, KM_PRESS, KM_ANY, 0)->ptr, "nr", 3); + RNA_int_set(WM_keymap_add_item(keymap, "VIEW3D_OT_layers", FOURKEY, KM_PRESS, KM_ANY, 0)->ptr, "nr", 4); + RNA_int_set(WM_keymap_add_item(keymap, "VIEW3D_OT_layers", FIVEKEY, KM_PRESS, KM_ANY, 0)->ptr, "nr", 5); + RNA_int_set(WM_keymap_add_item(keymap, "VIEW3D_OT_layers", SIXKEY, KM_PRESS, KM_ANY, 0)->ptr, "nr", 6); + RNA_int_set(WM_keymap_add_item(keymap, "VIEW3D_OT_layers", SEVENKEY, KM_PRESS, KM_ANY, 0)->ptr, "nr", 7); + RNA_int_set(WM_keymap_add_item(keymap, "VIEW3D_OT_layers", EIGHTKEY, KM_PRESS, KM_ANY, 0)->ptr, "nr", 8); + RNA_int_set(WM_keymap_add_item(keymap, "VIEW3D_OT_layers", NINEKEY, KM_PRESS, KM_ANY, 0)->ptr, "nr", 9); + RNA_int_set(WM_keymap_add_item(keymap, "VIEW3D_OT_layers", ZEROKEY, KM_PRESS, KM_ANY, 0)->ptr, "nr", 10); + /* drawtype */ km = WM_keymap_add_item(keymap, "VIEW3D_OT_drawtype", ZKEY, KM_PRESS, 0, 0); RNA_int_set(km->ptr, "draw_type", OB_SOLID);