diff options
Diffstat (limited to 'source/blender/editors')
44 files changed, 1603 insertions, 170 deletions
diff --git a/source/blender/editors/animation/anim_channels_edit.c b/source/blender/editors/animation/anim_channels_edit.c index a6eb9c5f3b5..6032b21ab88 100644 --- a/source/blender/editors/animation/anim_channels_edit.c +++ b/source/blender/editors/animation/anim_channels_edit.c @@ -3194,7 +3194,7 @@ void ED_operatortypes_animchannels(void) // TODO: check on a poll callback for this, to get hotkeys into menus void ED_keymap_animchannels(wmKeyConfig *keyconf) { - wmKeyMap *keymap = WM_keymap_find(keyconf, "Animation Channels", 0, 0); + wmKeyMap *keymap = WM_keymap_ensure(keyconf, "Animation Channels", 0, 0); wmKeyMapItem *kmi; /* click-select */ diff --git a/source/blender/editors/animation/anim_markers.c b/source/blender/editors/animation/anim_markers.c index fe6c36d4cdb..2085ad869be 100644 --- a/source/blender/editors/animation/anim_markers.c +++ b/source/blender/editors/animation/anim_markers.c @@ -1648,7 +1648,7 @@ void ED_operatortypes_marker(void) /* called in screen_ops.c:ED_keymap_screen() */ void ED_keymap_marker(wmKeyConfig *keyconf) { - wmKeyMap *keymap = WM_keymap_find(keyconf, "Markers", 0, 0); + wmKeyMap *keymap = WM_keymap_ensure(keyconf, "Markers", 0, 0); wmKeyMapItem *kmi; WM_keymap_verify_item(keymap, "MARKER_OT_add", MKEY, KM_PRESS, 0, 0); diff --git a/source/blender/editors/animation/anim_ops.c b/source/blender/editors/animation/anim_ops.c index 45fe7233f94..5ec38025ade 100644 --- a/source/blender/editors/animation/anim_ops.c +++ b/source/blender/editors/animation/anim_ops.c @@ -536,7 +536,7 @@ void ED_operatortypes_anim(void) void ED_keymap_anim(wmKeyConfig *keyconf) { - wmKeyMap *keymap = WM_keymap_find(keyconf, "Animation", 0, 0); + wmKeyMap *keymap = WM_keymap_ensure(keyconf, "Animation", 0, 0); wmKeyMapItem *kmi; /* frame management */ diff --git a/source/blender/editors/armature/armature_ops.c b/source/blender/editors/armature/armature_ops.c index 70894741b7f..323fa36832b 100644 --- a/source/blender/editors/armature/armature_ops.c +++ b/source/blender/editors/armature/armature_ops.c @@ -193,7 +193,7 @@ void ED_keymap_armature(wmKeyConfig *keyconf) wmKeyMapItem *kmi; /* Armature ------------------------ */ - keymap = WM_keymap_find(keyconf, "Armature", 0, 0); + keymap = WM_keymap_ensure(keyconf, "Armature", 0, 0); keymap->poll = ED_operator_editarmature; /* only set in editmode armature, by space_view3d listener */ @@ -294,7 +294,7 @@ void ED_keymap_armature(wmKeyConfig *keyconf) /* Pose ------------------------ */ /* only set in posemode, by space_view3d listener */ - keymap = WM_keymap_find(keyconf, "Pose", 0, 0); + keymap = WM_keymap_ensure(keyconf, "Pose", 0, 0); keymap->poll = ED_operator_posemode; /* set parent and add object are object-based operators, but we make them diff --git a/source/blender/editors/curve/curve_ops.c b/source/blender/editors/curve/curve_ops.c index 8f7cb911824..ae07196860b 100644 --- a/source/blender/editors/curve/curve_ops.c +++ b/source/blender/editors/curve/curve_ops.c @@ -170,7 +170,7 @@ void ED_keymap_curve(wmKeyConfig *keyconf) wmKeyMap *keymap; wmKeyMapItem *kmi; - keymap = WM_keymap_find(keyconf, "Font", 0, 0); + keymap = WM_keymap_ensure(keyconf, "Font", 0, 0); keymap->poll = ED_operator_editfont; /* only set in editmode font, by space_view3d listener */ @@ -230,7 +230,7 @@ void ED_keymap_curve(wmKeyConfig *keyconf) RNA_boolean_set(kmi->ptr, "accent", true); /* accented characters */ /* only set in editmode curve, by space_view3d listener */ - keymap = WM_keymap_find(keyconf, "Curve", 0, 0); + keymap = WM_keymap_ensure(keyconf, "Curve", 0, 0); keymap->poll = ED_operator_editsurfcurve; WM_keymap_add_menu(keymap, "VIEW3D_MT_edit_curve_add", AKEY, KM_PRESS, KM_SHIFT, 0); diff --git a/source/blender/editors/gpencil/gpencil_ops.c b/source/blender/editors/gpencil/gpencil_ops.c index 2a82fa88ce5..b14f18714a5 100644 --- a/source/blender/editors/gpencil/gpencil_ops.c +++ b/source/blender/editors/gpencil/gpencil_ops.c @@ -62,7 +62,7 @@ /* Generic Drawing Keymap - Annotations */ static void ed_keymap_gpencil_general(wmKeyConfig *keyconf) { - wmKeyMap *keymap = WM_keymap_find(keyconf, "Grease Pencil", 0, 0); + wmKeyMap *keymap = WM_keymap_ensure(keyconf, "Grease Pencil", 0, 0); wmKeyMapItem *kmi; /* Draw --------------------------------------- */ @@ -335,7 +335,7 @@ static void ed_keymap_gpencil_weight(wmKeyMap *keymap) /* Stroke Editing Keymap - Only when editmode is enabled */ static void ed_keymap_gpencil_editing(wmKeyConfig *keyconf) { - wmKeyMap *keymap = WM_keymap_find(keyconf, "Grease Pencil Stroke Edit Mode", 0, 0); + wmKeyMap *keymap = WM_keymap_ensure(keyconf, "Grease Pencil Stroke Edit Mode", 0, 0); wmKeyMapItem *kmi; /* set poll callback - so that this keymap only gets enabled when stroke editmode is enabled */ @@ -463,7 +463,7 @@ static void ed_keymap_gpencil_editing(wmKeyConfig *keyconf) /* keys for draw with a drawing brush (no fill) */ static void ed_keymap_gpencil_painting_draw(wmKeyConfig *keyconf) { - wmKeyMap *keymap = WM_keymap_find(keyconf, "Grease Pencil Stroke Paint (Draw brush)", 0, 0); + wmKeyMap *keymap = WM_keymap_ensure(keyconf, "Grease Pencil Stroke Paint (Draw brush)", 0, 0); wmKeyMapItem *kmi; /* set poll callback */ @@ -518,7 +518,7 @@ static void ed_keymap_gpencil_painting_draw(wmKeyConfig *keyconf) /* keys for draw with a eraser brush (erase) */ static void ed_keymap_gpencil_painting_erase(wmKeyConfig *keyconf) { - wmKeyMap *keymap = WM_keymap_find(keyconf, "Grease Pencil Stroke Paint (Erase)", 0, 0); + wmKeyMap *keymap = WM_keymap_ensure(keyconf, "Grease Pencil Stroke Paint (Erase)", 0, 0); wmKeyMapItem *kmi; /* set poll callback */ @@ -545,7 +545,7 @@ static void ed_keymap_gpencil_painting_erase(wmKeyConfig *keyconf) /* keys for draw with a fill brush */ static void ed_keymap_gpencil_painting_fill(wmKeyConfig *keyconf) { - wmKeyMap *keymap = WM_keymap_find(keyconf, "Grease Pencil Stroke Paint (Fill)", 0, 0); + wmKeyMap *keymap = WM_keymap_ensure(keyconf, "Grease Pencil Stroke Paint (Fill)", 0, 0); wmKeyMapItem *kmi; /* set poll callback */ @@ -577,7 +577,7 @@ static void ed_keymap_gpencil_painting_fill(wmKeyConfig *keyconf) /* Stroke Painting Keymap - Only when paintmode is enabled */ static void ed_keymap_gpencil_painting(wmKeyConfig *keyconf) { - wmKeyMap *keymap = WM_keymap_find(keyconf, "Grease Pencil Stroke Paint Mode", 0, 0); + wmKeyMap *keymap = WM_keymap_ensure(keyconf, "Grease Pencil Stroke Paint Mode", 0, 0); wmKeyMapItem *kmi; /* set poll callback - so that this keymap only gets enabled when stroke paintmode is enabled */ @@ -602,7 +602,7 @@ static void ed_keymap_gpencil_painting(wmKeyConfig *keyconf) /* Stroke Sculpting Keymap - Only when sculptmode is enabled */ static void ed_keymap_gpencil_sculpting(wmKeyConfig *keyconf) { - wmKeyMap *keymap = WM_keymap_find(keyconf, "Grease Pencil Stroke Sculpt Mode", 0, 0); + wmKeyMap *keymap = WM_keymap_ensure(keyconf, "Grease Pencil Stroke Sculpt Mode", 0, 0); /* set poll callback - so that this keymap only gets enabled when stroke sculptmode is enabled */ keymap->poll = gp_stroke_sculptmode_poll; @@ -620,7 +620,7 @@ static void ed_keymap_gpencil_sculpting(wmKeyConfig *keyconf) /* Stroke Weight Paint Keymap - Only when weight is enabled */ static void ed_keymap_gpencil_weightpainting(wmKeyConfig *keyconf) { - wmKeyMap *keymap = WM_keymap_find(keyconf, "Grease Pencil Stroke Weight Mode", 0, 0); + wmKeyMap *keymap = WM_keymap_ensure(keyconf, "Grease Pencil Stroke Weight Mode", 0, 0); wmKeyMapItem *kmi; /* set poll callback - so that this keymap only gets enabled when stroke sculptmode is enabled */ diff --git a/source/blender/editors/interface/interface_ops.c b/source/blender/editors/interface/interface_ops.c index ae0fe912f95..19b6ab91877 100644 --- a/source/blender/editors/interface/interface_ops.c +++ b/source/blender/editors/interface/interface_ops.c @@ -1372,7 +1372,7 @@ void ED_operatortypes_ui(void) */ void ED_keymap_ui(wmKeyConfig *keyconf) { - wmKeyMap *keymap = WM_keymap_find(keyconf, "User Interface", 0, 0); + wmKeyMap *keymap = WM_keymap_ensure(keyconf, "User Interface", 0, 0); wmKeyMapItem *kmi; /* eyedroppers - notice they all have the same shortcut, but pass the event diff --git a/source/blender/editors/interface/view2d_ops.c b/source/blender/editors/interface/view2d_ops.c index 1c56dabb396..f2411c1861a 100644 --- a/source/blender/editors/interface/view2d_ops.c +++ b/source/blender/editors/interface/view2d_ops.c @@ -2130,7 +2130,7 @@ void ED_operatortypes_view2d(void) void ED_keymap_view2d(wmKeyConfig *keyconf) { - wmKeyMap *keymap = WM_keymap_find(keyconf, "View2D", 0, 0); + wmKeyMap *keymap = WM_keymap_ensure(keyconf, "View2D", 0, 0); wmKeyMapItem *kmi; /* scrollers */ @@ -2190,7 +2190,7 @@ void ED_keymap_view2d(wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "VIEW2D_OT_zoom_border", BKEY, KM_PRESS, KM_SHIFT, 0); /* Alternative keymap for buttons listview */ - keymap = WM_keymap_find(keyconf, "View2D Buttons List", 0, 0); + keymap = WM_keymap_ensure(keyconf, "View2D Buttons List", 0, 0); WM_keymap_add_item(keymap, "VIEW2D_OT_scroller_activate", LEFTMOUSE, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "VIEW2D_OT_scroller_activate", MIDDLEMOUSE, KM_PRESS, 0, 0); diff --git a/source/blender/editors/lattice/lattice_ops.c b/source/blender/editors/lattice/lattice_ops.c index 593b880e501..2e6eafb0886 100644 --- a/source/blender/editors/lattice/lattice_ops.c +++ b/source/blender/editors/lattice/lattice_ops.c @@ -59,7 +59,7 @@ void ED_keymap_lattice(wmKeyConfig *keyconf) wmKeyMap *keymap; wmKeyMapItem *kmi; - keymap = WM_keymap_find(keyconf, "Lattice", 0, 0); + keymap = WM_keymap_ensure(keyconf, "Lattice", 0, 0); keymap->poll = ED_operator_editlattice; kmi = WM_keymap_add_item(keymap, "LATTICE_OT_select_all", AKEY, KM_PRESS, 0, 0); diff --git a/source/blender/editors/mask/mask_edit.c b/source/blender/editors/mask/mask_edit.c index 060778cefc9..d734f4fbb93 100644 --- a/source/blender/editors/mask/mask_edit.c +++ b/source/blender/editors/mask/mask_edit.c @@ -526,7 +526,7 @@ void ED_keymap_mask(wmKeyConfig *keyconf) wmKeyMap *keymap; wmKeyMapItem *kmi; - keymap = WM_keymap_find(keyconf, "Mask Editing", 0, 0); + keymap = WM_keymap_ensure(keyconf, "Mask Editing", 0, 0); keymap->poll = ED_maskedit_poll; WM_keymap_add_item(keymap, "MASK_OT_new", NKEY, KM_PRESS, KM_ALT, 0); diff --git a/source/blender/editors/mesh/mesh_ops.c b/source/blender/editors/mesh/mesh_ops.c index fe5b85e69fb..a318b3b78e5 100644 --- a/source/blender/editors/mesh/mesh_ops.c +++ b/source/blender/editors/mesh/mesh_ops.c @@ -328,7 +328,7 @@ void ED_keymap_mesh(wmKeyConfig *keyconf) wmKeyMap *keymap; wmKeyMapItem *kmi; - keymap = WM_keymap_find(keyconf, "Mesh", 0, 0); + keymap = WM_keymap_ensure(keyconf, "Mesh", 0, 0); keymap->poll = ED_operator_editmesh; kmi = WM_keymap_add_item(keymap, "MESH_OT_loopcut_slide", RKEY, KM_PRESS, KM_CTRL, 0); diff --git a/source/blender/editors/metaball/mball_ops.c b/source/blender/editors/metaball/mball_ops.c index 09d1b3a3ed8..97636b59143 100644 --- a/source/blender/editors/metaball/mball_ops.c +++ b/source/blender/editors/metaball/mball_ops.c @@ -73,7 +73,7 @@ void ED_keymap_metaball(wmKeyConfig *keyconf) wmKeyMap *keymap; wmKeyMapItem *kmi; - keymap = WM_keymap_find(keyconf, "Metaball", 0, 0); + keymap = WM_keymap_ensure(keyconf, "Metaball", 0, 0); keymap->poll = ED_operator_editmball; WM_keymap_add_item(keymap, "OBJECT_OT_metaball_add", AKEY, KM_PRESS, KM_SHIFT, 0); diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c index b6135eb177c..ca13f32ec52 100644 --- a/source/blender/editors/object/object_ops.c +++ b/source/blender/editors/object/object_ops.c @@ -308,7 +308,7 @@ void ED_keymap_object(wmKeyConfig *keyconf) wmKeyMapItem *kmi; /* Objects, Regardless of Mode -------------------------------------------------- */ - keymap = WM_keymap_find(keyconf, "Object Non-modal", 0, 0); + keymap = WM_keymap_ensure(keyconf, "Object Non-modal", 0, 0); /* modes */ kmi = WM_keymap_add_item(keymap, "OBJECT_OT_mode_set", TABKEY, KM_PRESS, 0, 0); @@ -327,7 +327,7 @@ void ED_keymap_object(wmKeyConfig *keyconf) /* Object Mode ---------------------------------------------------------------- */ /* Note: this keymap gets disabled in non-objectmode, */ - keymap = WM_keymap_find(keyconf, "Object Mode", 0, 0); + keymap = WM_keymap_ensure(keyconf, "Object Mode", 0, 0); keymap->poll = object_mode_poll; /* object mode supports PET now */ diff --git a/source/blender/editors/physics/physics_ops.c b/source/blender/editors/physics/physics_ops.c index a41033bf47d..c95e7bb3e15 100644 --- a/source/blender/editors/physics/physics_ops.c +++ b/source/blender/editors/physics/physics_ops.c @@ -114,7 +114,7 @@ static void keymap_particle(wmKeyConfig *keyconf) wmKeyMapItem *kmi; wmKeyMap *keymap; - keymap = WM_keymap_find(keyconf, "Particle", 0, 0); + keymap = WM_keymap_ensure(keyconf, "Particle", 0, 0); keymap->poll = PE_poll; kmi = WM_keymap_add_item(keymap, "PARTICLE_OT_select_all", AKEY, KM_PRESS, 0, 0); @@ -208,7 +208,7 @@ static void operatortypes_dynamicpaint(void) //static void keymap_pointcache(wmWindowManager *wm) //{ -// wmKeyMap *keymap = WM_keymap_find(wm, "Pointcache", 0, 0); +// wmKeyMap *keymap = WM_keymap_ensure(wm, "Pointcache", 0, 0); // // WM_keymap_add_item(keymap, "PHYSICS_OT_bake_all", AKEY, KM_PRESS, 0, 0); // WM_keymap_add_item(keymap, "PHYSICS_OT_free_all", PADPLUSKEY, KM_PRESS, KM_CTRL, 0); diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index a031b9f50c7..4ad40807c8b 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -1441,7 +1441,7 @@ static void ed_default_handlers(wmWindowManager *wm, ScrArea *sa, ListBase *hand /* XXX it would be good to have boundbox checks for some of these... */ if (flag & ED_KEYMAP_UI) { - wmKeyMap *keymap = WM_keymap_find(wm->defaultconf, "User Interface", 0, 0); + wmKeyMap *keymap = WM_keymap_ensure(wm->defaultconf, "User Interface", 0, 0); WM_event_add_keymap_handler(handlers, keymap); /* user interface widgets */ @@ -1449,12 +1449,12 @@ static void ed_default_handlers(wmWindowManager *wm, ScrArea *sa, ListBase *hand } if (flag & ED_KEYMAP_VIEW2D) { /* 2d-viewport handling+manipulation */ - wmKeyMap *keymap = WM_keymap_find(wm->defaultconf, "View2D", 0, 0); + wmKeyMap *keymap = WM_keymap_ensure(wm->defaultconf, "View2D", 0, 0); WM_event_add_keymap_handler(handlers, keymap); } if (flag & ED_KEYMAP_MARKERS) { /* time-markers */ - wmKeyMap *keymap = WM_keymap_find(wm->defaultconf, "Markers", 0, 0); + wmKeyMap *keymap = WM_keymap_ensure(wm->defaultconf, "Markers", 0, 0); /* use a boundbox restricted map */ ARegion *ar; @@ -1468,12 +1468,12 @@ static void ed_default_handlers(wmWindowManager *wm, ScrArea *sa, ListBase *hand } if (flag & ED_KEYMAP_ANIMATION) { /* frame changing and timeline operators (for time spaces) */ - wmKeyMap *keymap = WM_keymap_find(wm->defaultconf, "Animation", 0, 0); + wmKeyMap *keymap = WM_keymap_ensure(wm->defaultconf, "Animation", 0, 0); WM_event_add_keymap_handler(handlers, keymap); } if (flag & ED_KEYMAP_FRAMES) { /* frame changing/jumping (for all spaces) */ - wmKeyMap *keymap = WM_keymap_find(wm->defaultconf, "Frames", 0, 0); + wmKeyMap *keymap = WM_keymap_ensure(wm->defaultconf, "Frames", 0, 0); WM_event_add_keymap_handler(handlers, keymap); } if (flag & ED_KEYMAP_GPENCIL) { @@ -1484,30 +1484,30 @@ static void ed_default_handlers(wmWindowManager *wm, ScrArea *sa, ListBase *hand * For now, it's easier to just include all, * since you hardly want one without the others. */ - wmKeyMap *keymap_general = WM_keymap_find(wm->defaultconf, "Grease Pencil", 0, 0); + wmKeyMap *keymap_general = WM_keymap_ensure(wm->defaultconf, "Grease Pencil", 0, 0); WM_event_add_keymap_handler(handlers, keymap_general); - wmKeyMap *keymap_edit = WM_keymap_find(wm->defaultconf, "Grease Pencil Stroke Edit Mode", 0, 0); + wmKeyMap *keymap_edit = WM_keymap_ensure(wm->defaultconf, "Grease Pencil Stroke Edit Mode", 0, 0); WM_event_add_keymap_handler(handlers, keymap_edit); - wmKeyMap *keymap_paint = WM_keymap_find(wm->defaultconf, "Grease Pencil Stroke Paint Mode", 0, 0); + wmKeyMap *keymap_paint = WM_keymap_ensure(wm->defaultconf, "Grease Pencil Stroke Paint Mode", 0, 0); WM_event_add_keymap_handler(handlers, keymap_paint); - wmKeyMap *keymap_paint_draw = WM_keymap_find(wm->defaultconf, "Grease Pencil Stroke Paint (Draw brush)", 0, 0); + wmKeyMap *keymap_paint_draw = WM_keymap_ensure(wm->defaultconf, "Grease Pencil Stroke Paint (Draw brush)", 0, 0); WM_event_add_keymap_handler(handlers, keymap_paint_draw); - wmKeyMap *keymap_paint_erase = WM_keymap_find(wm->defaultconf, "Grease Pencil Stroke Paint (Erase)", 0, 0); + wmKeyMap *keymap_paint_erase = WM_keymap_ensure(wm->defaultconf, "Grease Pencil Stroke Paint (Erase)", 0, 0); WM_event_add_keymap_handler(handlers, keymap_paint_erase); - wmKeyMap *keymap_paint_fill = WM_keymap_find(wm->defaultconf, "Grease Pencil Stroke Paint (Fill)", 0, 0); + wmKeyMap *keymap_paint_fill = WM_keymap_ensure(wm->defaultconf, "Grease Pencil Stroke Paint (Fill)", 0, 0); WM_event_add_keymap_handler(handlers, keymap_paint_fill); - wmKeyMap *keymap_sculpt = WM_keymap_find(wm->defaultconf, "Grease Pencil Stroke Sculpt Mode", 0, 0); + wmKeyMap *keymap_sculpt = WM_keymap_ensure(wm->defaultconf, "Grease Pencil Stroke Sculpt Mode", 0, 0); WM_event_add_keymap_handler(handlers, keymap_sculpt); } if (flag & ED_KEYMAP_HEADER) { /* standard keymap for headers regions */ - wmKeyMap *keymap = WM_keymap_find(wm->defaultconf, "Header", 0, 0); + wmKeyMap *keymap = WM_keymap_ensure(wm->defaultconf, "Header", 0, 0); WM_event_add_keymap_handler(handlers, keymap); } } @@ -2307,7 +2307,7 @@ void ED_region_panels_init(wmWindowManager *wm, ARegion *ar) UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_PANELS_UI, ar->winx, ar->winy); - keymap = WM_keymap_find(wm->defaultconf, "View2D Buttons List", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "View2D Buttons List", 0, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); } diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index 0550afda342..4acffb6eca7 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -4861,7 +4861,7 @@ void ED_keymap_screen(wmKeyConfig *keyconf) wmKeyMapItem *kmi; /* Screen Editing ------------------------------------------------ */ - keymap = WM_keymap_find(keyconf, "Screen Editing", 0, 0); + keymap = WM_keymap_ensure(keyconf, "Screen Editing", 0, 0); RNA_int_set(WM_keymap_add_item(keymap, "SCREEN_OT_actionzone", LEFTMOUSE, KM_PRESS, 0, 0)->ptr, "modifier", 0); RNA_int_set(WM_keymap_add_item(keymap, "SCREEN_OT_actionzone", LEFTMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "modifier", 1); @@ -4886,12 +4886,12 @@ void ED_keymap_screen(wmKeyConfig *keyconf) /* Header Editing ------------------------------------------------ */ /* note: this is only used when the cursor is inside the header */ - keymap = WM_keymap_find(keyconf, "Header", 0, 0); + keymap = WM_keymap_ensure(keyconf, "Header", 0, 0); WM_keymap_add_item(keymap, "SCREEN_OT_header_context_menu", RIGHTMOUSE, KM_PRESS, 0, 0); /* Screen General ------------------------------------------------ */ - keymap = WM_keymap_find(keyconf, "Screen", 0, 0); + keymap = WM_keymap_ensure(keyconf, "Screen", 0, 0); /* standard timers */ WM_keymap_add_item(keymap, "SCREEN_OT_animation_step", TIMER0, KM_ANY, KM_ANY, 0); @@ -4970,7 +4970,7 @@ void ED_keymap_screen(wmKeyConfig *keyconf) /* Anim Playback ------------------------------------------------ */ - keymap = WM_keymap_find(keyconf, "Frames", 0, 0); + keymap = WM_keymap_ensure(keyconf, "Frames", 0, 0); /* frame offsets */ #ifdef USE_WM_KEYMAP_27X @@ -5023,7 +5023,7 @@ void ED_keymap_screen(wmKeyConfig *keyconf) /* Alternative keys for animation and sequencer playing */ #if 0 /* XXX: disabled for restoring later... bad implementation */ - keymap = WM_keymap_find(keyconf, "Frames", 0, 0); + keymap = WM_keymap_ensure(keyconf, "Frames", 0, 0); kmi = WM_keymap_add_item(keymap, "SCREEN_OT_animation_play", RIGHTARROWKEY, KM_PRESS, KM_ALT, 0); RNA_boolean_set(kmi->ptr, "cycle_speed", true); diff --git a/source/blender/editors/sculpt_paint/paint_ops.c b/source/blender/editors/sculpt_paint/paint_ops.c index 359c93175b4..05be3db635f 100644 --- a/source/blender/editors/sculpt_paint/paint_ops.c +++ b/source/blender/editors/sculpt_paint/paint_ops.c @@ -1297,13 +1297,13 @@ void ED_keymap_paint(wmKeyConfig *keyconf) wmKeyMapItem *kmi; int i; - keymap = WM_keymap_find(keyconf, "Paint Curve", 0, 0); + keymap = WM_keymap_ensure(keyconf, "Paint Curve", 0, 0); keymap->poll = paint_curve_poll; paint_keymap_curve(keymap); /* Sculpt mode */ - keymap = WM_keymap_find(keyconf, "Sculpt", 0, 0); + keymap = WM_keymap_ensure(keyconf, "Sculpt", 0, 0); keymap->poll = sculpt_mode_poll; RNA_enum_set(WM_keymap_add_item(keymap, "SCULPT_OT_brush_stroke", LEFTMOUSE, KM_PRESS, 0, 0)->ptr, "mode", BRUSH_STROKE_NORMAL); @@ -1378,7 +1378,7 @@ void ED_keymap_paint(wmKeyConfig *keyconf) WM_keymap_add_menu(keymap, "VIEW3D_MT_angle_control", RKEY, KM_PRESS, 0, 0); /* Vertex Paint mode */ - keymap = WM_keymap_find(keyconf, "Vertex Paint", 0, 0); + keymap = WM_keymap_ensure(keyconf, "Vertex Paint", 0, 0); keymap->poll = vertex_paint_mode_poll; WM_keymap_verify_item(keymap, "PAINT_OT_vertex_paint", LEFTMOUSE, KM_PRESS, 0, 0); @@ -1404,7 +1404,7 @@ void ED_keymap_paint(wmKeyConfig *keyconf) RNA_string_set(kmi->ptr, "data_path", "tool_settings.vertex_paint.brush.stroke_method"); /* Weight Paint mode */ - keymap = WM_keymap_find(keyconf, "Weight Paint", 0, 0); + keymap = WM_keymap_ensure(keyconf, "Weight Paint", 0, 0); keymap->poll = weight_paint_mode_poll; WM_keymap_verify_item(keymap, "PAINT_OT_weight_paint", LEFTMOUSE, KM_PRESS, 0, 0); @@ -1435,7 +1435,7 @@ void ED_keymap_paint(wmKeyConfig *keyconf) RNA_string_set(kmi->ptr, "data_path", "tool_settings.weight_paint.brush.use_smooth_stroke"); /*Weight paint's Vertex Selection Mode */ - keymap = WM_keymap_find(keyconf, "Weight Paint Vertex Selection", 0, 0); + keymap = WM_keymap_ensure(keyconf, "Weight Paint Vertex Selection", 0, 0); keymap->poll = vert_paint_poll; kmi = WM_keymap_add_item(keymap, "PAINT_OT_vert_select_all", AKEY, KM_PRESS, 0, 0); RNA_enum_set(kmi->ptr, "action", SEL_SELECT); @@ -1451,7 +1451,7 @@ void ED_keymap_paint(wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "VIEW3D_OT_select_circle", CKEY, KM_PRESS, 0, 0); /* Image/Texture Paint mode */ - keymap = WM_keymap_find(keyconf, "Image Paint", 0, 0); + keymap = WM_keymap_ensure(keyconf, "Image Paint", 0, 0); keymap->poll = image_texture_paint_poll; RNA_enum_set(WM_keymap_add_item(keymap, "PAINT_OT_image_paint", LEFTMOUSE, KM_PRESS, 0, 0)->ptr, "mode", BRUSH_STROKE_NORMAL); @@ -1479,7 +1479,7 @@ void ED_keymap_paint(wmKeyConfig *keyconf) RNA_string_set(kmi->ptr, "data_path", "tool_settings.image_paint.brush.stroke_method"); /* face-mask mode */ - keymap = WM_keymap_find(keyconf, "Face Mask", 0, 0); + keymap = WM_keymap_ensure(keyconf, "Face Mask", 0, 0); keymap->poll = facemask_paint_poll; kmi = WM_keymap_add_item(keymap, "PAINT_OT_face_select_all", AKEY, KM_PRESS, 0, 0); @@ -1500,7 +1500,7 @@ void ED_keymap_paint(wmKeyConfig *keyconf) kmi = WM_keymap_add_item(keymap, "PAINT_OT_face_select_linked_pick", LKEY, KM_PRESS, KM_SHIFT, 0); RNA_boolean_set(kmi->ptr, "deselect", true); - keymap = WM_keymap_find(keyconf, "UV Sculpt", 0, 0); + keymap = WM_keymap_ensure(keyconf, "UV Sculpt", 0, 0); keymap->poll = uv_sculpt_keymap_poll; kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle", QKEY, KM_PRESS, 0, 0); diff --git a/source/blender/editors/space_action/action_ops.c b/source/blender/editors/space_action/action_ops.c index a53561f814d..4976ffa3fc3 100644 --- a/source/blender/editors/space_action/action_ops.c +++ b/source/blender/editors/space_action/action_ops.c @@ -281,7 +281,7 @@ void action_keymap(wmKeyConfig *keyconf) wmKeyMap *keymap; /* keymap for all regions */ - keymap = WM_keymap_find(keyconf, "Dopesheet Generic", SPACE_ACTION, 0); + keymap = WM_keymap_ensure(keyconf, "Dopesheet Generic", SPACE_ACTION, 0); /* region management... */ WM_keymap_add_item(keymap, "ACTION_OT_properties", NKEY, KM_PRESS, 0, 0); @@ -294,6 +294,6 @@ void action_keymap(wmKeyConfig *keyconf) */ /* keyframes */ - keymap = WM_keymap_find(keyconf, "Dopesheet", SPACE_ACTION, 0); + keymap = WM_keymap_ensure(keyconf, "Dopesheet", SPACE_ACTION, 0); action_keymap_keyframes(keyconf, keymap); } diff --git a/source/blender/editors/space_action/space_action.c b/source/blender/editors/space_action/space_action.c index 8e9d40ad4b1..3e8e92d814d 100644 --- a/source/blender/editors/space_action/space_action.c +++ b/source/blender/editors/space_action/space_action.c @@ -205,9 +205,9 @@ static void action_main_region_init(wmWindowManager *wm, ARegion *ar) UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_CUSTOM, ar->winx, ar->winy); /* own keymap */ - keymap = WM_keymap_find(wm->defaultconf, "Dopesheet", SPACE_ACTION, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Dopesheet", SPACE_ACTION, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); - keymap = WM_keymap_find(wm->defaultconf, "Dopesheet Generic", SPACE_ACTION, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Dopesheet Generic", SPACE_ACTION, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); } @@ -296,12 +296,12 @@ static void action_channel_region_init(wmWindowManager *wm, ARegion *ar) UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_LIST, ar->winx, ar->winy); /* own keymap */ - keymap = WM_keymap_find(wm->defaultconf, "Animation Channels", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Animation Channels", 0, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); WM_keymap_add_menu(keymap, "DOPESHEET_MT_specials_channels", WKEY, KM_PRESS, 0, 0); - keymap = WM_keymap_find(wm->defaultconf, "Dopesheet Generic", SPACE_ACTION, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Dopesheet Generic", SPACE_ACTION, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); } @@ -749,7 +749,7 @@ static void action_buttons_area_init(wmWindowManager *wm, ARegion *ar) ED_region_panels_init(wm, ar); - keymap = WM_keymap_find(wm->defaultconf, "Dopesheet Generic", SPACE_ACTION, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Dopesheet Generic", SPACE_ACTION, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); } diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c index 5172d63911c..56d70d10a96 100644 --- a/source/blender/editors/space_buttons/space_buttons.c +++ b/source/blender/editors/space_buttons/space_buttons.c @@ -130,7 +130,7 @@ static void buttons_main_region_init(wmWindowManager *wm, ARegion *ar) ED_region_panels_init(wm, ar); - keymap = WM_keymap_find(wm->defaultconf, "Property Editor", SPACE_BUTS, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Property Editor", SPACE_BUTS, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); } @@ -330,7 +330,7 @@ static void buttons_operatortypes(void) static void buttons_keymap(struct wmKeyConfig *keyconf) { - wmKeyMap *keymap = WM_keymap_find(keyconf, "Property Editor", SPACE_BUTS, 0); + wmKeyMap *keymap = WM_keymap_ensure(keyconf, "Property Editor", SPACE_BUTS, 0); WM_keymap_add_item(keymap, "BUTTONS_OT_context_menu", RIGHTMOUSE, KM_PRESS, 0, 0); } diff --git a/source/blender/editors/space_clip/space_clip.c b/source/blender/editors/space_clip/space_clip.c index 79e1dc35245..bee266285d3 100644 --- a/source/blender/editors/space_clip/space_clip.c +++ b/source/blender/editors/space_clip/space_clip.c @@ -543,7 +543,7 @@ static void clip_keymap(struct wmKeyConfig *keyconf) /* ******** Global hotkeys avalaible for all regions ******** */ - keymap = WM_keymap_find(keyconf, "Clip", SPACE_CLIP, 0); + keymap = WM_keymap_ensure(keyconf, "Clip", SPACE_CLIP, 0); WM_keymap_add_item(keymap, "CLIP_OT_open", OKEY, KM_PRESS, KM_ALT, 0); @@ -583,7 +583,7 @@ static void clip_keymap(struct wmKeyConfig *keyconf) /* ******** Hotkeys avalaible for main region only ******** */ - keymap = WM_keymap_find(keyconf, "Clip Editor", SPACE_CLIP, 0); + keymap = WM_keymap_ensure(keyconf, "Clip Editor", SPACE_CLIP, 0); // keymap->poll = ED_space_clip_tracking_poll; /* ** View/navigation ** */ @@ -754,7 +754,7 @@ static void clip_keymap(struct wmKeyConfig *keyconf) /* ******** Hotkeys avalaible for preview region only ******** */ - keymap = WM_keymap_find(keyconf, "Clip Graph Editor", SPACE_CLIP, 0); + keymap = WM_keymap_ensure(keyconf, "Clip Graph Editor", SPACE_CLIP, 0); /* "timeline" */ WM_keymap_add_item(keymap, "CLIP_OT_change_frame", ACTIONMOUSE, KM_PRESS, 0, 0); @@ -810,7 +810,7 @@ static void clip_keymap(struct wmKeyConfig *keyconf) /* ******** Hotkeys avalaible for channels region only ******** */ - keymap = WM_keymap_find(keyconf, "Clip Dopesheet Editor", SPACE_CLIP, 0); + keymap = WM_keymap_ensure(keyconf, "Clip Dopesheet Editor", SPACE_CLIP, 0); kmi = WM_keymap_add_item(keymap, "CLIP_OT_dopesheet_select_channel", LEFTMOUSE, KM_PRESS, 0, 0); RNA_boolean_set(kmi->ptr, "extend", true); /* toggle */ @@ -1109,14 +1109,14 @@ static void clip_main_region_init(wmWindowManager *wm, ARegion *ar) UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_STANDARD, ar->winx, ar->winy); /* mask polls mode */ - keymap = WM_keymap_find(wm->defaultconf, "Mask Editing", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Mask Editing", 0, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); /* own keymap */ - keymap = WM_keymap_find(wm->defaultconf, "Clip", SPACE_CLIP, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Clip", SPACE_CLIP, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); - keymap = WM_keymap_find(wm->defaultconf, "Clip Editor", SPACE_CLIP, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Clip Editor", SPACE_CLIP, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); } @@ -1235,13 +1235,13 @@ static void clip_preview_region_init(wmWindowManager *wm, ARegion *ar) UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_CUSTOM, ar->winx, ar->winy); /* own keymap */ - keymap = WM_keymap_find(wm->defaultconf, "Clip", SPACE_CLIP, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Clip", SPACE_CLIP, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); - keymap = WM_keymap_find(wm->defaultconf, "Clip Graph Editor", SPACE_CLIP, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Clip Graph Editor", SPACE_CLIP, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); - keymap = WM_keymap_find(wm->defaultconf, "Clip Dopesheet Editor", SPACE_CLIP, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Clip Dopesheet Editor", SPACE_CLIP, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); } @@ -1359,7 +1359,7 @@ static void clip_channels_region_init(wmWindowManager *wm, ARegion *ar) UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_LIST, ar->winx, ar->winy); - keymap = WM_keymap_find(wm->defaultconf, "Clip Dopesheet Editor", SPACE_CLIP, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Clip Dopesheet Editor", SPACE_CLIP, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); } @@ -1435,7 +1435,7 @@ static void clip_tools_region_init(wmWindowManager *wm, ARegion *ar) ED_region_panels_init(wm, ar); - keymap = WM_keymap_find(wm->defaultconf, "Clip", SPACE_CLIP, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Clip", SPACE_CLIP, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); } @@ -1480,7 +1480,7 @@ static void clip_properties_region_init(wmWindowManager *wm, ARegion *ar) ED_region_panels_init(wm, ar); - keymap = WM_keymap_find(wm->defaultconf, "Clip", SPACE_CLIP, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Clip", SPACE_CLIP, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); } diff --git a/source/blender/editors/space_console/space_console.c b/source/blender/editors/space_console/space_console.c index 3429d726349..a5e9f6cf641 100644 --- a/source/blender/editors/space_console/space_console.c +++ b/source/blender/editors/space_console/space_console.c @@ -146,7 +146,7 @@ static void console_main_region_init(wmWindowManager *wm, ARegion *ar) } /* own keymap */ - keymap = WM_keymap_find(wm->defaultconf, "Console", SPACE_CONSOLE, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Console", SPACE_CONSOLE, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); /* add drop boxes */ @@ -265,7 +265,7 @@ static void console_operatortypes(void) static void console_keymap(struct wmKeyConfig *keyconf) { - wmKeyMap *keymap = WM_keymap_find(keyconf, "Console", SPACE_CONSOLE, 0); + wmKeyMap *keymap = WM_keymap_ensure(keyconf, "Console", SPACE_CONSOLE, 0); wmKeyMapItem *kmi; #ifdef __APPLE__ diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c index cb21659dbb8..d1847956c13 100644 --- a/source/blender/editors/space_file/space_file.c +++ b/source/blender/editors/space_file/space_file.c @@ -330,10 +330,10 @@ static void file_main_region_init(wmWindowManager *wm, ARegion *ar) UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_LIST, ar->winx, ar->winy); /* own keymaps */ - keymap = WM_keymap_find(wm->defaultconf, "File Browser", SPACE_FILE, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "File Browser", SPACE_FILE, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); - keymap = WM_keymap_find(wm->defaultconf, "File Browser Main", SPACE_FILE, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "File Browser Main", SPACE_FILE, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); } @@ -491,7 +491,7 @@ static void file_keymap(struct wmKeyConfig *keyconf) { wmKeyMapItem *kmi; /* keys for all regions */ - wmKeyMap *keymap = WM_keymap_find(keyconf, "File Browser", SPACE_FILE, 0); + wmKeyMap *keymap = WM_keymap_ensure(keyconf, "File Browser", SPACE_FILE, 0); /* More common 'fliebrowser-like navigation' shortcuts. */ WM_keymap_add_item(keymap, "FILE_OT_parent", UPARROWKEY, KM_PRESS, KM_ALT, 0); @@ -515,7 +515,7 @@ static void file_keymap(struct wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "FILE_OT_bookmark_add", BKEY, KM_PRESS, KM_CTRL, 0); /* keys for main region */ - keymap = WM_keymap_find(keyconf, "File Browser Main", SPACE_FILE, 0); + keymap = WM_keymap_ensure(keyconf, "File Browser Main", SPACE_FILE, 0); kmi = WM_keymap_add_item(keymap, "FILE_OT_execute", LEFTMOUSE, KM_DBL_CLICK, 0, 0); RNA_boolean_set(kmi->ptr, "need_active", true); @@ -607,7 +607,7 @@ static void file_keymap(struct wmKeyConfig *keyconf) /* keys for button region (top) */ - keymap = WM_keymap_find(keyconf, "File Browser Buttons", SPACE_FILE, 0); + keymap = WM_keymap_ensure(keyconf, "File Browser Buttons", SPACE_FILE, 0); kmi = WM_keymap_add_item(keymap, "FILE_OT_filenum", PADPLUSKEY, KM_PRESS, 0, 0); RNA_int_set(kmi->ptr, "increment", 1); kmi = WM_keymap_add_item(keymap, "FILE_OT_filenum", PADPLUSKEY, KM_PRESS, KM_SHIFT, 0); @@ -631,7 +631,7 @@ static void file_tools_region_init(wmWindowManager *wm, ARegion *ar) ED_region_panels_init(wm, ar); /* own keymaps */ - keymap = WM_keymap_find(wm->defaultconf, "File Browser", SPACE_FILE, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "File Browser", SPACE_FILE, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); } @@ -659,7 +659,7 @@ static void file_header_region_init(wmWindowManager *wm, ARegion *ar) ED_region_header_init(ar); - keymap = WM_keymap_find(wm->defaultconf, "File Browser", SPACE_FILE, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "File Browser", SPACE_FILE, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); } @@ -676,10 +676,10 @@ static void file_ui_region_init(wmWindowManager *wm, ARegion *ar) UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_HEADER, ar->winx, ar->winy); /* own keymap */ - keymap = WM_keymap_find(wm->defaultconf, "File Browser", SPACE_FILE, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "File Browser", SPACE_FILE, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); - keymap = WM_keymap_find(wm->defaultconf, "File Browser Buttons", SPACE_FILE, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "File Browser Buttons", SPACE_FILE, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); } diff --git a/source/blender/editors/space_graph/graph_ops.c b/source/blender/editors/space_graph/graph_ops.c index d796c9be3b6..8699bb595fa 100644 --- a/source/blender/editors/space_graph/graph_ops.c +++ b/source/blender/editors/space_graph/graph_ops.c @@ -693,7 +693,7 @@ void graphedit_keymap(wmKeyConfig *keyconf) wmKeyMapItem *kmi; /* keymap for all regions */ - keymap = WM_keymap_find(keyconf, "Graph Editor Generic", SPACE_IPO, 0); + keymap = WM_keymap_ensure(keyconf, "Graph Editor Generic", SPACE_IPO, 0); WM_keymap_add_item(keymap, "GRAPH_OT_properties", NKEY, KM_PRESS, 0, 0); /* extrapolation works on channels, not keys */ @@ -719,6 +719,6 @@ void graphedit_keymap(wmKeyConfig *keyconf) */ /* keyframes */ - keymap = WM_keymap_find(keyconf, "Graph Editor", SPACE_IPO, 0); + keymap = WM_keymap_ensure(keyconf, "Graph Editor", SPACE_IPO, 0); graphedit_keymap_keyframes(keyconf, keymap); } diff --git a/source/blender/editors/space_graph/space_graph.c b/source/blender/editors/space_graph/space_graph.c index 435f2bb7aa5..6a921eede4a 100644 --- a/source/blender/editors/space_graph/space_graph.c +++ b/source/blender/editors/space_graph/space_graph.c @@ -222,9 +222,9 @@ static void graph_main_region_init(wmWindowManager *wm, ARegion *ar) UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_CUSTOM, ar->winx, ar->winy); /* own keymap */ - keymap = WM_keymap_find(wm->defaultconf, "Graph Editor", SPACE_IPO, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Graph Editor", SPACE_IPO, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); - keymap = WM_keymap_find(wm->defaultconf, "Graph Editor Generic", SPACE_IPO, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Graph Editor Generic", SPACE_IPO, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); } @@ -368,9 +368,9 @@ static void graph_channel_region_init(wmWindowManager *wm, ARegion *ar) UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_LIST, ar->winx, ar->winy); /* own keymap */ - keymap = WM_keymap_find(wm->defaultconf, "Animation Channels", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Animation Channels", 0, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); - keymap = WM_keymap_find(wm->defaultconf, "Graph Editor Generic", SPACE_IPO, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Graph Editor Generic", SPACE_IPO, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); } @@ -420,7 +420,7 @@ static void graph_buttons_region_init(wmWindowManager *wm, ARegion *ar) ED_region_panels_init(wm, ar); - keymap = WM_keymap_find(wm->defaultconf, "Graph Editor Generic", SPACE_IPO, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Graph Editor Generic", SPACE_IPO, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); } diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c index f46b5893dde..1b7851eede7 100644 --- a/source/blender/editors/space_image/space_image.c +++ b/source/blender/editors/space_image/space_image.c @@ -293,7 +293,7 @@ static void image_operatortypes(void) static void image_keymap(struct wmKeyConfig *keyconf) { - wmKeyMap *keymap = WM_keymap_find(keyconf, "Image Generic", SPACE_IMAGE, 0); + wmKeyMap *keymap = WM_keymap_ensure(keyconf, "Image Generic", SPACE_IMAGE, 0); wmKeyMapItem *kmi; int i; @@ -311,7 +311,7 @@ static void image_keymap(struct wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "IMAGE_OT_cycle_render_slot", JKEY, KM_PRESS, 0, 0); RNA_boolean_set(WM_keymap_add_item(keymap, "IMAGE_OT_cycle_render_slot", JKEY, KM_PRESS, KM_ALT, 0)->ptr, "reverse", true); - keymap = WM_keymap_find(keyconf, "Image", SPACE_IMAGE, 0); + keymap = WM_keymap_ensure(keyconf, "Image", SPACE_IMAGE, 0); WM_keymap_add_item(keymap, "IMAGE_OT_view_all", HOMEKEY, KM_PRESS, 0, 0); @@ -678,29 +678,29 @@ static void image_main_region_init(wmWindowManager *wm, ARegion *ar) WM_gizmomap_add_handlers(ar, ar->gizmo_map); /* mask polls mode */ - keymap = WM_keymap_find(wm->defaultconf, "Mask Editing", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Mask Editing", 0, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); /* image paint polls for mode */ - keymap = WM_keymap_find(wm->defaultconf, "Curve", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Curve", 0, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); - keymap = WM_keymap_find(wm->defaultconf, "Paint Curve", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Paint Curve", 0, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); - keymap = WM_keymap_find(wm->defaultconf, "Image Paint", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Image Paint", 0, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); - keymap = WM_keymap_find(wm->defaultconf, "UV Editor", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "UV Editor", 0, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); - keymap = WM_keymap_find(wm->defaultconf, "UV Sculpt", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "UV Sculpt", 0, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); /* own keymaps */ - keymap = WM_keymap_find(wm->defaultconf, "Image Generic", SPACE_IMAGE, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Image Generic", SPACE_IMAGE, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); - keymap = WM_keymap_find(wm->defaultconf, "Image", SPACE_IMAGE, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Image", SPACE_IMAGE, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); } @@ -868,7 +868,7 @@ static void image_buttons_region_init(wmWindowManager *wm, ARegion *ar) ar->v2d.scroll = V2D_SCROLL_RIGHT | V2D_SCROLL_VERTICAL_HIDE; ED_region_panels_init(wm, ar); - keymap = WM_keymap_find(wm->defaultconf, "Image Generic", SPACE_IMAGE, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Image Generic", SPACE_IMAGE, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); } @@ -922,7 +922,7 @@ static void image_tools_region_init(wmWindowManager *wm, ARegion *ar) ar->v2d.scroll = V2D_SCROLL_RIGHT | V2D_SCROLL_VERTICAL_HIDE; ED_region_panels_init(wm, ar); - keymap = WM_keymap_find(wm->defaultconf, "Image Generic", SPACE_IMAGE, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Image Generic", SPACE_IMAGE, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); } diff --git a/source/blender/editors/space_info/space_info.c b/source/blender/editors/space_info/space_info.c index 397a58ea3ea..abc953507e0 100644 --- a/source/blender/editors/space_info/space_info.c +++ b/source/blender/editors/space_info/space_info.c @@ -137,7 +137,7 @@ static void info_main_region_init(wmWindowManager *wm, ARegion *ar) UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_CUSTOM, ar->winx, ar->winy); /* own keymap */ - keymap = WM_keymap_find(wm->defaultconf, "Info", SPACE_INFO, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Info", SPACE_INFO, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); } @@ -207,12 +207,12 @@ static void info_operatortypes(void) static void info_keymap(struct wmKeyConfig *keyconf) { - wmKeyMap *keymap = WM_keymap_find(keyconf, "Window", 0, 0); + wmKeyMap *keymap = WM_keymap_ensure(keyconf, "Window", 0, 0); WM_keymap_verify_item(keymap, "INFO_OT_reports_display_update", TIMERREPORT, KM_ANY, KM_ANY, 0); /* info space */ - keymap = WM_keymap_find(keyconf, "Info", SPACE_INFO, 0); + keymap = WM_keymap_ensure(keyconf, "Info", SPACE_INFO, 0); /* report selection */ diff --git a/source/blender/editors/space_logic/space_logic.c b/source/blender/editors/space_logic/space_logic.c new file mode 100644 index 00000000000..6d484b4cb4c --- /dev/null +++ b/source/blender/editors/space_logic/space_logic.c @@ -0,0 +1,373 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2009 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Blender Foundation + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/editors/space_logic/space_logic.c + * \ingroup splogic + */ + + +#include <string.h> +#include <stdio.h> + + +#include "MEM_guardedalloc.h" + +#include "BLI_blenlib.h" +#include "BLI_utildefines.h" + +#include "DNA_gpencil_types.h" + +#include "BKE_context.h" +#include "BKE_library.h" +#include "BKE_screen.h" + +#include "ED_space_api.h" +#include "ED_screen.h" + +#include "BIF_gl.h" + + +#include "WM_api.h" +#include "WM_types.h" + +#include "UI_resources.h" +#include "UI_view2d.h" + +#include "logic_intern.h" + +/* ******************** manage regions ********************* */ + +ARegion *logic_has_buttons_region(ScrArea *sa) +{ + ARegion *ar, *arnew; + + ar = BKE_area_find_region_type(sa, RGN_TYPE_UI); + if (ar) return ar; + + /* add subdiv level; after header */ + ar = BKE_area_find_region_type(sa, RGN_TYPE_HEADER); + + /* is error! */ + if (ar == NULL) return NULL; + + arnew= MEM_callocN(sizeof(ARegion), "buttons for image"); + + BLI_insertlinkafter(&sa->regionbase, ar, arnew); + arnew->regiontype = RGN_TYPE_UI; + arnew->alignment = RGN_ALIGN_RIGHT; + + arnew->flag = RGN_FLAG_HIDDEN; + + return arnew; +} + +/* ******************** default callbacks for image space ***************** */ + +static SpaceLink *logic_new(const bContext *C) +{ + ScrArea *sa= CTX_wm_area(C); + ARegion *ar; + SpaceLogic *slogic; + + slogic= MEM_callocN(sizeof(SpaceLogic), "initlogic"); + slogic->spacetype= SPACE_LOGIC; + + /* default options */ + slogic->scaflag = ((BUTS_SENS_SEL|BUTS_SENS_ACT|BUTS_SENS_LINK) | + (BUTS_CONT_SEL|BUTS_CONT_ACT|BUTS_CONT_LINK) | + (BUTS_ACT_SEL|BUTS_ACT_ACT|BUTS_ACT_LINK) | + (BUTS_SENS_STATE|BUTS_ACT_STATE)); + + + /* header */ + ar= MEM_callocN(sizeof(ARegion), "header for logic"); + + BLI_addtail(&slogic->regionbase, ar); + ar->regiontype= RGN_TYPE_HEADER; + ar->alignment= RGN_ALIGN_BOTTOM; + + /* buttons/list view */ + ar= MEM_callocN(sizeof(ARegion), "buttons for logic"); + + BLI_addtail(&slogic->regionbase, ar); + ar->regiontype= RGN_TYPE_UI; + ar->alignment= RGN_ALIGN_RIGHT; + + /* main region */ + ar= MEM_callocN(sizeof(ARegion), "main region for logic"); + + BLI_addtail(&slogic->regionbase, ar); + ar->regiontype= RGN_TYPE_WINDOW; + + ar->v2d.tot.xmin = 0.0f; + ar->v2d.tot.ymax = 0.0f; + ar->v2d.tot.xmax = 1150.0f; + ar->v2d.tot.ymin = ( 1150.0f/(float)sa->winx ) * (float)-sa->winy; + + ar->v2d.cur = ar->v2d.tot; + + ar->v2d.min[0] = 1.0f; + ar->v2d.min[1] = 1.0f; + + ar->v2d.max[0] = 32000.0f; + ar->v2d.max[1] = 32000.0f; + + ar->v2d.minzoom = 0.5f; + ar->v2d.maxzoom = 1.5f; + + ar->v2d.scroll = (V2D_SCROLL_RIGHT | V2D_SCROLL_BOTTOM); + ar->v2d.keepzoom = V2D_KEEPZOOM | V2D_LIMITZOOM | V2D_KEEPASPECT; + ar->v2d.keeptot = V2D_KEEPTOT_BOUNDS; + ar->v2d.align = V2D_ALIGN_NO_POS_Y | V2D_ALIGN_NO_NEG_X; + ar->v2d.keepofs = V2D_KEEPOFS_Y; + + return (SpaceLink *)slogic; +} + +/* not spacelink itself */ +static void logic_free(SpaceLink *UNUSED(sl)) +{ +// Spacelogic *slogic= (SpaceLogic *) sl; + +// if (slogic->gpd) +// XXX BKE_gpencil_free(slogic->gpd); + +} + + +/* spacetype; init callback */ +static void logic_init(struct wmWindowManager *UNUSED(wm), ScrArea *UNUSED(sa)) +{ + +} + +static SpaceLink *logic_duplicate(SpaceLink *sl) +{ + SpaceLogic *slogicn= MEM_dupallocN(sl); + + return (SpaceLink *)slogicn; +} + +static void logic_operatortypes(void) +{ + WM_operatortype_append(LOGIC_OT_properties); + WM_operatortype_append(LOGIC_OT_links_cut); +} + +static void logic_keymap(struct wmKeyConfig *keyconf) +{ + wmKeyMap *keymap = WM_keymap_ensure(keyconf, "Logic Editor", SPACE_LOGIC, 0); + + WM_keymap_add_item(keymap, "LOGIC_OT_properties", NKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "LOGIC_OT_links_cut", LEFTMOUSE, KM_PRESS, KM_CTRL, 0); + WM_keymap_add_menu(keymap, "LOGIC_MT_logicbricks_add", AKEY, KM_PRESS, KM_SHIFT, 0); + + WM_keymap_add_item(keymap, "LOGIC_OT_view_all", HOMEKEY, KM_PRESS, 0, 0); +#ifdef WITH_INPUT_NDOF + WM_keymap_add_item(keymap, "LOGIC_OT_view_all", NDOF_BUTTON_FIT, KM_PRESS, 0, 0); +#endif +} + +static void logic_refresh(const bContext *UNUSED(C), ScrArea *UNUSED(sa)) +{ +// SpaceLogic *slogic= CTX_wm_space_logic(C); +// Object *obedit= CTX_data_edit_object(C); + +} + +static void logic_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn) +{ + /* context changes */ + switch (wmn->category) { + case NC_LOGIC: + ED_region_tag_redraw(ar); + break; + case NC_SCENE: + switch (wmn->data) { + case ND_FRAME: + ED_region_tag_redraw(ar); + break; + + case ND_OB_ACTIVE: + ED_region_tag_redraw(ar); + break; + } + break; + case NC_OBJECT: + break; + case NC_ID: + if (wmn->action == NA_RENAME) + ED_region_tag_redraw(ar); + break; + } +} + +static int logic_context(const bContext *UNUSED(C), const char *UNUSED(member), bContextDataResult *UNUSED(result)) +{ +// SpaceLogic *slogic= CTX_wm_space_logic(C); + return 0; +} + +/************************** main region ***************************/ + + +/* add handlers, stuff you only do once or on area/region changes */ +static void logic_main_region_init(wmWindowManager *wm, ARegion *ar) +{ + wmKeyMap *keymap; + + UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_CUSTOM, ar->winx, ar->winy); + + /* own keymaps */ + keymap = WM_keymap_ensure(wm->defaultconf, "Logic Editor", SPACE_LOGIC, 0); + WM_event_add_keymap_handler(&ar->handlers, keymap); +} + +static void logic_main_region_draw(const bContext *C, ARegion *ar) +{ + /* draw entirely, view changes should be handled here */ +// SpaceLogic *slogic= CTX_wm_space_logic(C); + View2D *v2d= &ar->v2d; + View2DScrollers *scrollers; + + /* clear and setup matrix */ + UI_ThemeClearColor(TH_BACK); + glClear(GL_COLOR_BUFFER_BIT); + + UI_view2d_view_ortho(v2d); + + logic_buttons((bContext *)C, ar); + + /* reset view matrix */ + UI_view2d_view_restore(C); + + /* scrollers */ + scrollers= UI_view2d_scrollers_calc(C, v2d, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_ARG_DUMMY); + UI_view2d_scrollers_draw(C, v2d, scrollers); + UI_view2d_scrollers_free(scrollers); + +} + + +/* *********************** buttons region ************************ */ + +/* add handlers, stuff you only do once or on area/region changes */ +static void logic_buttons_region_init(wmWindowManager *wm, ARegion *ar) +{ + wmKeyMap *keymap; + + ED_region_panels_init(wm, ar); + + keymap = WM_keymap_ensure(wm->defaultconf, "Logic Editor", SPACE_LOGIC, 0); + WM_event_add_keymap_handler(&ar->handlers, keymap); +} + +static void logic_buttons_region_draw(const bContext *C, ARegion *ar) +{ + ED_region_panels(C, ar, NULL, -1, true); +} + +/************************* header region **************************/ + +/* add handlers, stuff you only do once or on area/region changes */ +static void logic_header_region_init(wmWindowManager *UNUSED(wm), ARegion *ar) +{ + ED_region_header_init(ar); +} + +static void logic_header_region_draw(const bContext *C, ARegion *ar) +{ + ED_region_header(C, ar); +} + +/**************************** spacetype *****************************/ + +static void logic_id_remap(ScrArea *UNUSED(sa), SpaceLink *slink, ID *old_id, ID *new_id) +{ + SpaceLogic *slog = (SpaceLogic *)slink; + + if (!ELEM(GS(old_id->name), ID_GD)) { + return; + } + + if ((ID *)slog->gpd == old_id) { + slog->gpd = (bGPdata *)new_id; + id_us_min(old_id); + id_us_plus(new_id); + } +} + +/* only called once, from space/spacetypes.c */ +void ED_spacetype_logic(void) +{ + SpaceType *st = MEM_callocN(sizeof(SpaceType), "spacetype logic"); + ARegionType *art; + + st->spaceid = SPACE_LOGIC; + strncpy(st->name, "Logic", BKE_ST_MAXNAME); + + st->new = logic_new; + st->free = logic_free; + st->init = logic_init; + st->duplicate = logic_duplicate; + st->operatortypes = logic_operatortypes; + st->keymap = logic_keymap; + st->refresh = logic_refresh; + st->context = logic_context; + st->id_remap = logic_id_remap; + + /* regions: main window */ + art = MEM_callocN(sizeof(ARegionType), "spacetype logic region"); + art->regionid = RGN_TYPE_WINDOW; + art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_FRAMES | ED_KEYMAP_VIEW2D; + art->init = logic_main_region_init; + art->draw = logic_main_region_draw; + art->listener = logic_listener; + + BLI_addhead(&st->regiontypes, art); + + /* regions: listview/buttons */ + art = MEM_callocN(sizeof(ARegionType), "spacetype logic region"); + art->regionid = RGN_TYPE_UI; + art->prefsizex= 220; // XXX + art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_FRAMES; + art->listener = logic_listener; + art->init = logic_buttons_region_init; + art->draw = logic_buttons_region_draw; + BLI_addhead(&st->regiontypes, art); + + /* regions: header */ + art= MEM_callocN(sizeof(ARegionType), "spacetype logic region"); + art->regionid = RGN_TYPE_HEADER; + art->prefsizey = HEADERY; + art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_VIEW2D | ED_KEYMAP_FRAMES | ED_KEYMAP_HEADER; + art->init = logic_header_region_init; + art->draw = logic_header_region_draw; + + BLI_addhead(&st->regiontypes, art); + + BKE_spacetype_register(st); +} diff --git a/source/blender/editors/space_nla/nla_ops.c b/source/blender/editors/space_nla/nla_ops.c index 53a9c8a0dd2..53e9321b2e8 100644 --- a/source/blender/editors/space_nla/nla_ops.c +++ b/source/blender/editors/space_nla/nla_ops.c @@ -314,7 +314,7 @@ void nla_keymap(wmKeyConfig *keyconf) wmKeyMapItem *kmi; /* keymap for all regions ------------------------------------------- */ - keymap = WM_keymap_find(keyconf, "NLA Generic", SPACE_NLA, 0); + keymap = WM_keymap_ensure(keyconf, "NLA Generic", SPACE_NLA, 0); /* region management */ WM_keymap_add_item(keymap, "NLA_OT_properties", NKEY, KM_PRESS, 0, 0); @@ -346,10 +346,10 @@ void nla_keymap(wmKeyConfig *keyconf) * * However, those operations which involve clicking on channels and/or the placement of them in the view are implemented here instead */ - keymap = WM_keymap_find(keyconf, "NLA Channels", SPACE_NLA, 0); + keymap = WM_keymap_ensure(keyconf, "NLA Channels", SPACE_NLA, 0); nla_keymap_channels(keymap); /* data ------------------------------------------------------------- */ - keymap = WM_keymap_find(keyconf, "NLA Editor", SPACE_NLA, 0); + keymap = WM_keymap_ensure(keyconf, "NLA Editor", SPACE_NLA, 0); nla_keymap_main(keyconf, keymap); } diff --git a/source/blender/editors/space_nla/space_nla.c b/source/blender/editors/space_nla/space_nla.c index d33e8ff2662..bf9aa090b94 100644 --- a/source/blender/editors/space_nla/space_nla.c +++ b/source/blender/editors/space_nla/space_nla.c @@ -214,13 +214,13 @@ static void nla_channel_region_init(wmWindowManager *wm, ARegion *ar) /* own keymap */ /* own channels map first to override some channel keymaps */ - keymap = WM_keymap_find(wm->defaultconf, "NLA Channels", SPACE_NLA, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "NLA Channels", SPACE_NLA, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); /* now generic channels map for everything else that can apply */ - keymap = WM_keymap_find(wm->defaultconf, "Animation Channels", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Animation Channels", 0, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); - keymap = WM_keymap_find(wm->defaultconf, "NLA Generic", SPACE_NLA, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "NLA Generic", SPACE_NLA, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); } @@ -260,9 +260,9 @@ static void nla_main_region_init(wmWindowManager *wm, ARegion *ar) UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_CUSTOM, ar->winx, ar->winy); /* own keymap */ - keymap = WM_keymap_find(wm->defaultconf, "NLA Editor", SPACE_NLA, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "NLA Editor", SPACE_NLA, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); - keymap = WM_keymap_find(wm->defaultconf, "NLA Generic", SPACE_NLA, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "NLA Generic", SPACE_NLA, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); } @@ -355,7 +355,7 @@ static void nla_buttons_region_init(wmWindowManager *wm, ARegion *ar) ED_region_panels_init(wm, ar); - keymap = WM_keymap_find(wm->defaultconf, "NLA Generic", SPACE_NLA, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "NLA Generic", SPACE_NLA, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); } diff --git a/source/blender/editors/space_node/node_ops.c b/source/blender/editors/space_node/node_ops.c index 142d6fdc237..759b157b3f8 100644 --- a/source/blender/editors/space_node/node_ops.c +++ b/source/blender/editors/space_node/node_ops.c @@ -231,13 +231,13 @@ void node_keymap(struct wmKeyConfig *keyconf) wmKeyMapItem *kmi; /* Entire Editor only ----------------- */ - keymap = WM_keymap_find(keyconf, "Node Generic", SPACE_NODE, 0); + keymap = WM_keymap_ensure(keyconf, "Node Generic", SPACE_NODE, 0); WM_keymap_add_item(keymap, "NODE_OT_properties", NKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "NODE_OT_toolbar", TKEY, KM_PRESS, 0, 0); /* Main Region only ----------------- */ - keymap = WM_keymap_find(keyconf, "Node Editor", SPACE_NODE, 0); + keymap = WM_keymap_ensure(keyconf, "Node Editor", SPACE_NODE, 0); /* mouse select in nodes used to be both keys, but perhaps this should be reduced? * NOTE: mouse-clicks on left-mouse will fall through to allow transform-tweak, but also link/resize diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c index 51ba3a62d1b..38bc1b6da8d 100644 --- a/source/blender/editors/space_node/space_node.c +++ b/source/blender/editors/space_node/space_node.c @@ -596,7 +596,7 @@ static void node_buttons_region_init(wmWindowManager *wm, ARegion *ar) ED_region_panels_init(wm, ar); - keymap = WM_keymap_find(wm->defaultconf, "Node Generic", SPACE_NODE, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Node Generic", SPACE_NODE, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); } @@ -612,7 +612,7 @@ static void node_toolbar_region_init(wmWindowManager *wm, ARegion *ar) ED_region_panels_init(wm, ar); - keymap = WM_keymap_find(wm->defaultconf, "Node Generic", SPACE_NODE, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Node Generic", SPACE_NODE, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); } @@ -655,10 +655,10 @@ static void node_main_region_init(wmWindowManager *wm, ARegion *ar) WM_gizmomap_add_handlers(ar, ar->gizmo_map); /* own keymaps */ - keymap = WM_keymap_find(wm->defaultconf, "Node Generic", SPACE_NODE, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Node Generic", SPACE_NODE, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); - keymap = WM_keymap_find(wm->defaultconf, "Node Editor", SPACE_NODE, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Node Editor", SPACE_NODE, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); /* add drop boxes */ diff --git a/source/blender/editors/space_outliner/outliner_ops.c b/source/blender/editors/space_outliner/outliner_ops.c index 34734b74a21..66fd680a1e0 100644 --- a/source/blender/editors/space_outliner/outliner_ops.c +++ b/source/blender/editors/space_outliner/outliner_ops.c @@ -120,7 +120,7 @@ void outliner_operatortypes(void) void outliner_keymap(wmKeyConfig *keyconf) { - wmKeyMap *keymap = WM_keymap_find(keyconf, "Outliner", SPACE_OUTLINER, 0); + wmKeyMap *keymap = WM_keymap_ensure(keyconf, "Outliner", SPACE_OUTLINER, 0); wmKeyMapItem *kmi; WM_keymap_add_item(keymap, "OUTLINER_OT_highlight_update", MOUSEMOVE, KM_ANY, KM_ANY, 0); diff --git a/source/blender/editors/space_outliner/space_outliner.c b/source/blender/editors/space_outliner/space_outliner.c index b0d63aee7c0..37fa44f7386 100644 --- a/source/blender/editors/space_outliner/space_outliner.c +++ b/source/blender/editors/space_outliner/space_outliner.c @@ -84,7 +84,7 @@ static void outliner_main_region_init(wmWindowManager *wm, ARegion *ar) UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_LIST, ar->winx, ar->winy); /* own keymap */ - keymap = WM_keymap_find(wm->defaultconf, "Outliner", SPACE_OUTLINER, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Outliner", SPACE_OUTLINER, 0); /* don't pass on view2d mask, it's always set with scrollbar space, hide fails */ WM_event_add_keymap_handler_bb(&ar->handlers, keymap, NULL, &ar->winrct); diff --git a/source/blender/editors/space_script/space_script.c b/source/blender/editors/space_script/space_script.c index fe7261f7bbd..65c489e8409 100644 --- a/source/blender/editors/space_script/space_script.c +++ b/source/blender/editors/space_script/space_script.c @@ -133,7 +133,7 @@ static void script_main_region_init(wmWindowManager *wm, ARegion *ar) UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_STANDARD, ar->winx, ar->winy); /* own keymap */ - keymap = WM_keymap_find(wm->defaultconf, "Script", SPACE_SCRIPT, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Script", SPACE_SCRIPT, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); } diff --git a/source/blender/editors/space_sequencer/sequencer_ops.c b/source/blender/editors/space_sequencer/sequencer_ops.c index 14e181f2a25..bf1804955d7 100644 --- a/source/blender/editors/space_sequencer/sequencer_ops.c +++ b/source/blender/editors/space_sequencer/sequencer_ops.c @@ -138,7 +138,7 @@ void sequencer_keymap(wmKeyConfig *keyconf) wmKeyMapItem *kmi; /* Common items ------------------------------------------------------------------ */ - keymap = WM_keymap_find(keyconf, "SequencerCommon", SPACE_SEQ, 0); + keymap = WM_keymap_ensure(keyconf, "SequencerCommon", SPACE_SEQ, 0); WM_keymap_add_item(keymap, "SEQUENCER_OT_properties", NKEY, KM_PRESS, 0, 0); @@ -149,7 +149,7 @@ void sequencer_keymap(wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "SEQUENCER_OT_view_toggle", TABKEY, KM_PRESS, KM_CTRL, 0); /* Strips Region --------------------------------------------------------------- */ - keymap = WM_keymap_find(keyconf, "Sequencer", SPACE_SEQ, 0); + keymap = WM_keymap_ensure(keyconf, "Sequencer", SPACE_SEQ, 0); kmi = WM_keymap_add_item(keymap, "SEQUENCER_OT_select_all", AKEY, KM_PRESS, 0, 0); RNA_enum_set(kmi->ptr, "action", SEL_SELECT); @@ -343,7 +343,7 @@ void sequencer_keymap(wmKeyConfig *keyconf) /* Preview Region ----------------------------------------------------------- */ - keymap = WM_keymap_find(keyconf, "SequencerPreview", SPACE_SEQ, 0); + keymap = WM_keymap_ensure(keyconf, "SequencerPreview", SPACE_SEQ, 0); WM_keymap_add_item(keymap, "SEQUENCER_OT_view_all_preview", HOMEKEY, KM_PRESS, 0, 0); #ifdef WITH_INPUT_NDOF WM_keymap_add_item(keymap, "SEQUENCER_OT_view_all_preview", NDOF_BUTTON_FIT, KM_PRESS, 0, 0); diff --git a/source/blender/editors/space_sequencer/space_sequencer.c b/source/blender/editors/space_sequencer/space_sequencer.c index 11517d64d7a..c5d5a9695f8 100644 --- a/source/blender/editors/space_sequencer/space_sequencer.c +++ b/source/blender/editors/space_sequencer/space_sequencer.c @@ -471,15 +471,15 @@ static void sequencer_main_region_init(wmWindowManager *wm, ARegion *ar) UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_CUSTOM, ar->winx, ar->winy); #if 0 - keymap = WM_keymap_find(wm->defaultconf, "Mask Editing", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Mask Editing", 0, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); #endif - keymap = WM_keymap_find(wm->defaultconf, "SequencerCommon", SPACE_SEQ, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "SequencerCommon", SPACE_SEQ, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); /* own keymap */ - keymap = WM_keymap_find(wm->defaultconf, "Sequencer", SPACE_SEQ, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Sequencer", SPACE_SEQ, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); /* add drop boxes */ @@ -594,15 +594,15 @@ static void sequencer_preview_region_init(wmWindowManager *wm, ARegion *ar) UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_CUSTOM, ar->winx, ar->winy); #if 0 - keymap = WM_keymap_find(wm->defaultconf, "Mask Editing", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Mask Editing", 0, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); #endif - keymap = WM_keymap_find(wm->defaultconf, "SequencerCommon", SPACE_SEQ, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "SequencerCommon", SPACE_SEQ, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); /* own keymap */ - keymap = WM_keymap_find(wm->defaultconf, "SequencerPreview", SPACE_SEQ, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "SequencerPreview", SPACE_SEQ, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); } @@ -699,7 +699,7 @@ static void sequencer_buttons_region_init(wmWindowManager *wm, ARegion *ar) { wmKeyMap *keymap; - keymap = WM_keymap_find(wm->defaultconf, "SequencerCommon", SPACE_SEQ, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "SequencerCommon", SPACE_SEQ, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); ED_region_panels_init(wm, ar); diff --git a/source/blender/editors/space_text/space_text.c b/source/blender/editors/space_text/space_text.c index f3c55aa3474..7f2ce59361e 100644 --- a/source/blender/editors/space_text/space_text.c +++ b/source/blender/editors/space_text/space_text.c @@ -244,7 +244,7 @@ static void text_keymap(struct wmKeyConfig *keyconf) wmKeyMap *keymap; wmKeyMapItem *kmi; - keymap = WM_keymap_find(keyconf, "Text Generic", SPACE_TEXT, 0); + keymap = WM_keymap_ensure(keyconf, "Text Generic", SPACE_TEXT, 0); WM_keymap_add_item(keymap, "TEXT_OT_start_find", FKEY, KM_PRESS, KM_CTRL, 0); #ifdef __APPLE__ WM_keymap_add_item(keymap, "TEXT_OT_start_find", FKEY, KM_PRESS, KM_OSKEY, 0); @@ -254,7 +254,7 @@ static void text_keymap(struct wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "TEXT_OT_replace", HKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "TEXT_OT_properties", TKEY, KM_PRESS, KM_CTRL, 0); - keymap = WM_keymap_find(keyconf, "Text", SPACE_TEXT, 0); + keymap = WM_keymap_ensure(keyconf, "Text", SPACE_TEXT, 0); #ifdef __APPLE__ RNA_enum_set(WM_keymap_add_item(keymap, "TEXT_OT_move", LEFTARROWKEY, KM_PRESS, KM_OSKEY, 0)->ptr, "type", LINE_BEGIN); @@ -426,9 +426,9 @@ static void text_main_region_init(wmWindowManager *wm, ARegion *ar) UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_STANDARD, ar->winx, ar->winy); /* own keymap */ - keymap = WM_keymap_find(wm->defaultconf, "Text Generic", SPACE_TEXT, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Text Generic", SPACE_TEXT, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); - keymap = WM_keymap_find(wm->defaultconf, "Text", SPACE_TEXT, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Text", SPACE_TEXT, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); /* add drop boxes */ @@ -543,7 +543,7 @@ static void text_properties_region_init(wmWindowManager *wm, ARegion *ar) ED_region_panels_init(wm, ar); /* own keymaps */ - keymap = WM_keymap_find(wm->defaultconf, "Text Generic", SPACE_TEXT, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Text Generic", SPACE_TEXT, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); } diff --git a/source/blender/editors/space_time/space_time.c b/source/blender/editors/space_time/space_time.c new file mode 100644 index 00000000000..e3fe124a5c4 --- /dev/null +++ b/source/blender/editors/space_time/space_time.c @@ -0,0 +1,834 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2008 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Blender Foundation + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/editors/space_time/space_time.c + * \ingroup sptime + */ + + +#include <string.h> +#include <stdio.h> + +#include "DNA_cachefile_types.h" +#include "DNA_constraint_types.h" +#include "DNA_gpencil_types.h" +#include "DNA_modifier_types.h" +#include "DNA_object_types.h" +#include "DNA_scene_types.h" + +#include "MEM_guardedalloc.h" + +#include "BLI_blenlib.h" +#include "BLI_dlrbTree.h" +#include "BLI_utildefines.h" + +#include "BKE_constraint.h" +#include "BKE_context.h" +#include "BKE_main.h" +#include "BKE_modifier.h" +#include "BKE_screen.h" +#include "BKE_pointcache.h" + +#include "ED_anim_api.h" +#include "ED_keyframes_draw.h" +#include "ED_screen.h" + +#include "WM_api.h" +#include "WM_types.h" + +#include "BIF_gl.h" +#include "BIF_glutil.h" + +#include "UI_resources.h" +#include "UI_view2d.h" +#include "UI_interface.h" + +#include "ED_space_api.h" +#include "ED_markers.h" + +#include "time_intern.h" + +/* ************************ main time area region *********************** */ + +static void time_draw_sfra_efra(Scene *scene, View2D *v2d) +{ + /* draw darkened area outside of active timeline + * frame range used is preview range or scene range + */ + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glEnable(GL_BLEND); + glColor4f(0.0f, 0.0f, 0.0f, 0.4f); + + if (PSFRA < PEFRA) { + glRectf(v2d->cur.xmin, v2d->cur.ymin, (float)PSFRA, v2d->cur.ymax); + glRectf((float)PEFRA, v2d->cur.ymin, v2d->cur.xmax, v2d->cur.ymax); + } + else { + glRectf(v2d->cur.xmin, v2d->cur.ymin, v2d->cur.xmax, v2d->cur.ymax); + } + glDisable(GL_BLEND); + + UI_ThemeColorShade(TH_BACK, -60); + /* thin lines where the actual frames are */ + fdrawline((float)PSFRA, v2d->cur.ymin, (float)PSFRA, v2d->cur.ymax); + fdrawline((float)PEFRA, v2d->cur.ymin, (float)PEFRA, v2d->cur.ymax); +} + +static void time_draw_cache(Main *bmain, SpaceTime *stime, Object *ob, Scene *scene) +{ + PTCacheID *pid; + ListBase pidlist; + SpaceTimeCache *stc = stime->caches.first; + const float cache_draw_height = (4.0f * UI_DPI_FAC * U.pixelsize); + float yoffs = 0.f; + + if (!(stime->cache_display & TIME_CACHE_DISPLAY) || (!ob)) + return; + + BKE_ptcache_ids_from_object(bmain, &pidlist, ob, scene, 0); + + /* iterate over pointcaches on the active object, + * add spacetimecache and vertex array for each */ + for (pid = pidlist.first; pid; pid = pid->next) { + float col[4], *fp; + int i, sta = pid->cache->startframe, end = pid->cache->endframe; + int len = (end - sta + 1) * 4; + + switch (pid->type) { + case PTCACHE_TYPE_SOFTBODY: + if (!(stime->cache_display & TIME_CACHE_SOFTBODY)) continue; + break; + case PTCACHE_TYPE_PARTICLES: + if (!(stime->cache_display & TIME_CACHE_PARTICLES)) continue; + break; + case PTCACHE_TYPE_CLOTH: + if (!(stime->cache_display & TIME_CACHE_CLOTH)) continue; + break; + case PTCACHE_TYPE_SMOKE_DOMAIN: + case PTCACHE_TYPE_SMOKE_HIGHRES: + if (!(stime->cache_display & TIME_CACHE_SMOKE)) continue; + break; + case PTCACHE_TYPE_DYNAMICPAINT: + if (!(stime->cache_display & TIME_CACHE_DYNAMICPAINT)) continue; + break; + case PTCACHE_TYPE_RIGIDBODY: + if (!(stime->cache_display & TIME_CACHE_RIGIDBODY)) continue; + break; + } + + if (pid->cache->cached_frames == NULL) + continue; + + /* make sure we have stc with correct array length */ + if (stc == NULL || MEM_allocN_len(stc->array) != len * 2 * sizeof(float)) { + if (stc) { + MEM_freeN(stc->array); + } + else { + stc = MEM_callocN(sizeof(SpaceTimeCache), "spacetimecache"); + BLI_addtail(&stime->caches, stc); + } + + stc->array = MEM_callocN(len * 2 * sizeof(float), "SpaceTimeCache array"); + } + + /* fill the vertex array with a quad for each cached frame */ + for (i = sta, fp = stc->array; i <= end; i++) { + if (pid->cache->cached_frames[i - sta]) { + fp[0] = (float)i - 0.5f; + fp[1] = 0.0; + fp += 2; + + fp[0] = (float)i - 0.5f; + fp[1] = 1.0; + fp += 2; + + fp[0] = (float)i + 0.5f; + fp[1] = 1.0; + fp += 2; + + fp[0] = (float)i + 0.5f; + fp[1] = 0.0; + fp += 2; + } + } + + glPushMatrix(); + glTranslatef(0.0, (float)V2D_SCROLL_HEIGHT + yoffs, 0.0); + glScalef(1.0, cache_draw_height, 0.0); + + switch (pid->type) { + case PTCACHE_TYPE_SOFTBODY: + col[0] = 1.0; col[1] = 0.4; col[2] = 0.02; + col[3] = 0.1; + break; + case PTCACHE_TYPE_PARTICLES: + col[0] = 1.0; col[1] = 0.1; col[2] = 0.02; + col[3] = 0.1; + break; + case PTCACHE_TYPE_CLOTH: + col[0] = 0.1; col[1] = 0.1; col[2] = 0.75; + col[3] = 0.1; + break; + case PTCACHE_TYPE_SMOKE_DOMAIN: + case PTCACHE_TYPE_SMOKE_HIGHRES: + col[0] = 0.2; col[1] = 0.2; col[2] = 0.2; + col[3] = 0.1; + break; + case PTCACHE_TYPE_DYNAMICPAINT: + col[0] = 1.0; col[1] = 0.1; col[2] = 0.75; + col[3] = 0.1; + break; + case PTCACHE_TYPE_RIGIDBODY: + col[0] = 1.0; col[1] = 0.6; col[2] = 0.0; + col[3] = 0.1; + break; + default: + col[0] = 1.0; col[1] = 0.0; col[2] = 1.0; + col[3] = 0.1; + BLI_assert(0); + break; + } + glColor4fv(col); + + glEnable(GL_BLEND); + + glRectf((float)sta, 0.0, (float)end, 1.0); + + col[3] = 0.4f; + if (pid->cache->flag & PTCACHE_BAKED) { + col[0] -= 0.4f; col[1] -= 0.4f; col[2] -= 0.4f; + } + else if (pid->cache->flag & PTCACHE_OUTDATED) { + col[0] += 0.4f; col[1] += 0.4f; col[2] += 0.4f; + } + glColor4fv(col); + + glEnableClientState(GL_VERTEX_ARRAY); + glVertexPointer(2, GL_FLOAT, 0, stc->array); + glDrawArrays(GL_QUADS, 0, (fp - stc->array) / 2); + glDisableClientState(GL_VERTEX_ARRAY); + + glDisable(GL_BLEND); + + glPopMatrix(); + + yoffs += cache_draw_height; + + stc = stc->next; + } + + BLI_freelistN(&pidlist); + + /* free excessive caches */ + while (stc) { + SpaceTimeCache *tmp = stc->next; + BLI_remlink(&stime->caches, stc); + MEM_freeN(stc->array); + MEM_freeN(stc); + stc = tmp; + } +} + +static void time_cache_free(SpaceTime *stime) +{ + SpaceTimeCache *stc; + + for (stc = stime->caches.first; stc; stc = stc->next) { + if (stc->array) { + MEM_freeN(stc->array); + stc->array = NULL; + } + } + + BLI_freelistN(&stime->caches); +} + +static void time_cache_refresh(SpaceTime *stime) +{ + /* Free previous caches to indicate full refresh */ + time_cache_free(stime); +} + +/* helper function - find actkeycolumn that occurs on cframe, or the nearest one if not found */ +static ActKeyColumn *time_cfra_find_ak(ActKeyColumn *ak, float cframe) +{ + ActKeyColumn *akn = NULL; + + /* sanity checks */ + if (ak == NULL) + return NULL; + + /* check if this is a match, or whether it is in some subtree */ + if (cframe < ak->cfra) + akn = time_cfra_find_ak(ak->left, cframe); + else if (cframe > ak->cfra) + akn = time_cfra_find_ak(ak->right, cframe); + + /* if no match found (or found match), just use the current one */ + if (akn == NULL) + return ak; + else + return akn; +} + +/* helper for time_draw_keyframes() */ +static void time_draw_idblock_keyframes(View2D *v2d, ID *id, short onlysel) +{ + bDopeSheet ads = {NULL}; + DLRBT_Tree keys; + ActKeyColumn *ak; + + float fac1 = (GS(id->name) == ID_GD) ? 0.8f : 0.6f; /* draw GPencil keys taller, to help distinguish them */ + float fac2 = 1.0f - fac1; + + float ymin = v2d->tot.ymin; + float ymax = v2d->tot.ymax * fac1 + ymin * fac2; + + /* init binarytree-list for getting keyframes */ + BLI_dlrbTree_init(&keys); + + /* init dopesheet settings */ + if (onlysel) + ads.filterflag |= ADS_FILTER_ONLYSEL; + + /* populate tree with keyframe nodes */ + switch (GS(id->name)) { + case ID_SCE: + scene_to_keylist(&ads, (Scene *)id, &keys, NULL); + break; + case ID_OB: + ob_to_keylist(&ads, (Object *)id, &keys, NULL); + break; + case ID_GD: + gpencil_to_keylist(&ads, (bGPdata *)id, &keys); + break; + case ID_CF: + cachefile_to_keylist(&ads, (CacheFile *)id, &keys, NULL); + break; + default: + break; + } + + /* build linked-list for searching */ + BLI_dlrbTree_linkedlist_sync(&keys); + + /* start drawing keyframes + * - we use the binary-search capabilities of the tree to only start from + * the first visible keyframe (last one can then be easily checked) + * - draw within a single GL block to be faster + */ + glBegin(GL_LINES); + for (ak = time_cfra_find_ak(keys.root, v2d->cur.xmin); + (ak) && (ak->cfra <= v2d->cur.xmax); + ak = ak->next) + { + glVertex2f(ak->cfra, ymin); + glVertex2f(ak->cfra, ymax); + } + glEnd(); // GL_LINES + + /* free temp stuff */ + BLI_dlrbTree_free(&keys); +} + +static void time_draw_caches_keyframes(Main *bmain, Scene *scene, View2D *v2d, bool onlysel) +{ + CacheFile *cache_file; + + for (cache_file = bmain->cachefiles.first; + cache_file; + cache_file = cache_file->id.next) + { + cache_file->draw_flag &= ~CACHEFILE_KEYFRAME_DRAWN; + } + + for (Base *base = scene->base.first; base; base = base->next) { + Object *ob = base->object; + + ModifierData *md = modifiers_findByType(ob, eModifierType_MeshSequenceCache); + + if (md) { + MeshSeqCacheModifierData *mcmd = (MeshSeqCacheModifierData *)md; + + cache_file = mcmd->cache_file; + + if (!cache_file || (cache_file->draw_flag & CACHEFILE_KEYFRAME_DRAWN) != 0) { + continue; + } + + cache_file->draw_flag |= CACHEFILE_KEYFRAME_DRAWN; + + time_draw_idblock_keyframes(v2d, (ID *)cache_file, onlysel); + } + + for (bConstraint *con = ob->constraints.first; con; con = con->next) { + if (con->type != CONSTRAINT_TYPE_TRANSFORM_CACHE) { + continue; + } + + bTransformCacheConstraint *data = con->data; + + cache_file = data->cache_file; + + if (!cache_file || (cache_file->draw_flag & CACHEFILE_KEYFRAME_DRAWN) != 0) { + continue; + } + + cache_file->draw_flag |= CACHEFILE_KEYFRAME_DRAWN; + + time_draw_idblock_keyframes(v2d, (ID *)cache_file, onlysel); + } + } +} + +/* draw keyframe lines for timeline */ +static void time_draw_keyframes(const bContext *C, ARegion *ar) +{ + Scene *scene = CTX_data_scene(C); + Object *ob = CTX_data_active_object(C); + View2D *v2d = &ar->v2d; + bool onlysel = ((scene->flag & SCE_KEYS_NO_SELONLY) == 0); + + /* set this for all keyframe lines once and for all */ + glLineWidth(1.0); + + /* draw cache files keyframes (if available) */ + UI_ThemeColor(TH_TIME_KEYFRAME); + time_draw_caches_keyframes(CTX_data_main(C), scene, v2d, onlysel); + + /* draw grease pencil keyframes (if available) */ + UI_ThemeColor(TH_TIME_GP_KEYFRAME); + if (scene->gpd) { + time_draw_idblock_keyframes(v2d, (ID *)scene->gpd, onlysel); + } + if (ob && ob->gpd) { + time_draw_idblock_keyframes(v2d, (ID *)ob->gpd, onlysel); + } + + /* draw scene keyframes first + * - don't try to do this when only drawing active/selected data keyframes, + * since this can become quite slow + */ + if (onlysel == 0) { + /* set draw color */ + UI_ThemeColorShade(TH_TIME_KEYFRAME, -50); + time_draw_idblock_keyframes(v2d, (ID *)scene, onlysel); + } + + /* draw keyframes from selected objects + * - only do the active object if in posemode (i.e. showing only keyframes for the bones) + * OR the onlysel flag was set, which means that only active object's keyframes should + * be considered + */ + UI_ThemeColor(TH_TIME_KEYFRAME); + + if (ob && ((ob->mode == OB_MODE_POSE) || onlysel)) { + /* draw keyframes for active object only */ + time_draw_idblock_keyframes(v2d, (ID *)ob, onlysel); + } + else { + bool active_done = false; + + /* draw keyframes from all selected objects */ + CTX_DATA_BEGIN (C, Object *, obsel, selected_objects) + { + /* last arg is 0, since onlysel doesn't apply here... */ + time_draw_idblock_keyframes(v2d, (ID *)obsel, 0); + + /* if this object is the active one, set flag so that we don't draw again */ + if (obsel == ob) + active_done = true; + } + CTX_DATA_END; + + /* if active object hasn't been done yet, draw it... */ + if (ob && (active_done == 0)) + time_draw_idblock_keyframes(v2d, (ID *)ob, 0); + } +} + +/* ---------------- */ + +static void time_refresh(const bContext *UNUSED(C), ScrArea *sa) +{ + /* find the main timeline region and refresh cache display*/ + ARegion *ar = BKE_area_find_region_type(sa, RGN_TYPE_WINDOW); + if (ar) { + SpaceTime *stime = (SpaceTime *)sa->spacedata.first; + time_cache_refresh(stime); + } +} + +/* editor level listener */ +static void time_listener(bScreen *UNUSED(sc), ScrArea *sa, wmNotifier *wmn) +{ + + /* mainly for updating cache display */ + switch (wmn->category) { + case NC_OBJECT: + { + switch (wmn->data) { + case ND_BONE_SELECT: + case ND_BONE_ACTIVE: + case ND_POINTCACHE: + case ND_MODIFIER: + case ND_PARTICLE: + case ND_KEYS: + ED_area_tag_refresh(sa); + ED_area_tag_redraw(sa); + break; + } + break; + } + case NC_SCENE: + { + switch (wmn->data) { + case ND_RENDER_RESULT: + ED_area_tag_redraw(sa); + break; + case ND_OB_ACTIVE: + case ND_FRAME: + ED_area_tag_refresh(sa); + break; + case ND_FRAME_RANGE: + { + ARegion *ar; + Scene *scene = wmn->reference; + + for (ar = sa->regionbase.first; ar; ar = ar->next) { + if (ar->regiontype == RGN_TYPE_WINDOW) { + ar->v2d.tot.xmin = (float)(SFRA - 4); + ar->v2d.tot.xmax = (float)(EFRA + 4); + break; + } + } + break; + } + } + break; + } + case NC_SPACE: + { + switch (wmn->data) { + case ND_SPACE_CHANGED: + ED_area_tag_refresh(sa); + break; + } + break; + } + case NC_WM: + { + switch (wmn->data) { + case ND_FILEREAD: + ED_area_tag_refresh(sa); + break; + } + break; + } + } +} + +/* ---------------- */ + +/* add handlers, stuff you only do once or on area/region changes */ +static void time_main_region_init(wmWindowManager *wm, ARegion *ar) +{ + wmKeyMap *keymap; + + UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_CUSTOM, ar->winx, ar->winy); + + /* own keymap */ + keymap = WM_keymap_ensure(wm->defaultconf, "Timeline", SPACE_TIME, 0); + WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); +} + +static void time_main_region_draw(const bContext *C, ARegion *ar) +{ + /* draw entirely, view changes should be handled here */ + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); + SpaceTime *stime = CTX_wm_space_time(C); + Object *obact = CTX_data_active_object(C); + View2D *v2d = &ar->v2d; + View2DGrid *grid; + View2DScrollers *scrollers; + int unit, flag = 0; + + /* clear and setup matrix */ + UI_ThemeClearColor(TH_BACK); + glClear(GL_COLOR_BUFFER_BIT); + + UI_view2d_view_ortho(v2d); + + /* grid */ + unit = (stime->flag & TIME_DRAWFRAMES) ? V2D_UNIT_FRAMES : V2D_UNIT_SECONDS; + grid = UI_view2d_grid_calc(scene, v2d, unit, V2D_GRID_CLAMP, V2D_ARG_DUMMY, V2D_ARG_DUMMY, ar->winx, ar->winy); + UI_view2d_grid_draw(v2d, grid, (V2D_VERTICAL_LINES | V2D_VERTICAL_AXIS)); + UI_view2d_grid_free(grid); + + ED_region_draw_cb_draw(C, ar, REGION_DRAW_PRE_VIEW); + + /* start and end frame */ + time_draw_sfra_efra(scene, v2d); + + /* current frame */ + flag = DRAWCFRA_WIDE; /* this is only really needed on frames where there's a keyframe, but this will do... */ + if ((stime->flag & TIME_DRAWFRAMES) == 0) flag |= DRAWCFRA_UNIT_SECONDS; + if (stime->flag & TIME_CFRA_NUM) flag |= DRAWCFRA_SHOW_NUMBOX; + ANIM_draw_cfra(C, v2d, flag); + + UI_view2d_view_ortho(v2d); + + /* keyframes */ + time_draw_keyframes(C, ar); + + /* markers */ + UI_view2d_view_orthoSpecial(ar, v2d, 1); + ED_markers_draw(C, 0); + + /* caches */ + time_draw_cache(bmain, stime, obact, scene); + + /* callback */ + UI_view2d_view_ortho(v2d); + ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST_VIEW); + + /* reset view matrix */ + UI_view2d_view_restore(C); + + /* scrollers */ + scrollers = UI_view2d_scrollers_calc(C, v2d, unit, V2D_GRID_CLAMP, V2D_ARG_DUMMY, V2D_ARG_DUMMY); + UI_view2d_scrollers_draw(C, v2d, scrollers); + UI_view2d_scrollers_free(scrollers); +} + +static void time_main_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn) +{ + /* context changes */ + switch (wmn->category) { + case NC_SPACE: + if (wmn->data == ND_SPACE_TIME) + ED_region_tag_redraw(ar); + break; + + case NC_ANIMATION: + ED_region_tag_redraw(ar); + break; + + case NC_SCENE: + switch (wmn->data) { + case ND_OB_SELECT: + case ND_OB_ACTIVE: + case ND_FRAME: + case ND_FRAME_RANGE: + case ND_KEYINGSET: + case ND_RENDER_OPTIONS: + ED_region_tag_redraw(ar); + break; + } + break; + case NC_GPENCIL: + if (wmn->data == ND_DATA) + ED_region_tag_redraw(ar); + break; + } +} + +/* ************************ header time area region *********************** */ + +/* add handlers, stuff you only do once or on area/region changes */ +static void time_header_region_init(wmWindowManager *UNUSED(wm), ARegion *ar) +{ + ED_region_header_init(ar); +} + +static void time_header_region_draw(const bContext *C, ARegion *ar) +{ + ED_region_header(C, ar); +} + +static void time_header_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn) +{ + /* context changes */ + switch (wmn->category) { + case NC_SCREEN: + { + if (wmn->data == ND_ANIMPLAY) + ED_region_tag_redraw(ar); + break; + } + case NC_SCENE: + { + switch (wmn->data) { + case ND_RENDER_RESULT: + case ND_OB_SELECT: + case ND_FRAME: + case ND_FRAME_RANGE: + case ND_KEYINGSET: + case ND_RENDER_OPTIONS: + ED_region_tag_redraw(ar); + break; + } + break; + } + case NC_SPACE: + { + if (wmn->data == ND_SPACE_TIME) + ED_region_tag_redraw(ar); + break; + } + } +} + +/* ******************** default callbacks for time space ***************** */ + +static SpaceLink *time_new(const bContext *C) +{ + Scene *scene = CTX_data_scene(C); + ARegion *ar; + SpaceTime *stime; + + stime = MEM_callocN(sizeof(SpaceTime), "inittime"); + + stime->spacetype = SPACE_TIME; + stime->flag |= TIME_DRAWFRAMES; + + /* header */ + ar = MEM_callocN(sizeof(ARegion), "header for time"); + + BLI_addtail(&stime->regionbase, ar); + ar->regiontype = RGN_TYPE_HEADER; + ar->alignment = RGN_ALIGN_BOTTOM; + + /* main region */ + ar = MEM_callocN(sizeof(ARegion), "main region for time"); + + BLI_addtail(&stime->regionbase, ar); + ar->regiontype = RGN_TYPE_WINDOW; + + ar->v2d.tot.xmin = (float)(SFRA - 4); + ar->v2d.tot.ymin = 0.0f; + ar->v2d.tot.xmax = (float)(EFRA + 4); + ar->v2d.tot.ymax = 50.0f; + + ar->v2d.cur = ar->v2d.tot; + + ar->v2d.min[0] = 1.0f; + ar->v2d.min[1] = 50.0f; + + ar->v2d.max[0] = MAXFRAMEF; + ar->v2d.max[1] = 50.0; + + ar->v2d.minzoom = 0.1f; + ar->v2d.maxzoom = 10.0; + + ar->v2d.scroll |= (V2D_SCROLL_BOTTOM | V2D_SCROLL_SCALE_HORIZONTAL); + ar->v2d.align |= V2D_ALIGN_NO_NEG_Y; + ar->v2d.keepofs |= V2D_LOCKOFS_Y; + ar->v2d.keepzoom |= V2D_LOCKZOOM_Y; + + + return (SpaceLink *)stime; +} + +/* not spacelink itself */ +static void time_free(SpaceLink *sl) +{ + SpaceTime *stime = (SpaceTime *)sl; + + time_cache_free(stime); +} +/* spacetype; init callback in ED_area_initialize() */ +/* init is called to (re)initialize an existing editor (file read, screen changes) */ +/* validate spacedata, add own area level handlers */ +static void time_init(wmWindowManager *UNUSED(wm), ScrArea *sa) +{ + SpaceTime *stime = (SpaceTime *)sa->spacedata.first; + + time_cache_free(stime); + + /* enable all cache display */ + stime->cache_display |= TIME_CACHE_DISPLAY; + stime->cache_display |= (TIME_CACHE_SOFTBODY | TIME_CACHE_PARTICLES); + stime->cache_display |= (TIME_CACHE_CLOTH | TIME_CACHE_SMOKE | TIME_CACHE_DYNAMICPAINT); + stime->cache_display |= TIME_CACHE_RIGIDBODY; +} + +static SpaceLink *time_duplicate(SpaceLink *sl) +{ + SpaceTime *stime = (SpaceTime *)sl; + SpaceTime *stimen = MEM_dupallocN(stime); + + BLI_listbase_clear(&stimen->caches); + + return (SpaceLink *)stimen; +} + +/* only called once, from space_api/spacetypes.c */ +/* it defines all callbacks to maintain spaces */ +void ED_spacetype_time(void) +{ + SpaceType *st = MEM_callocN(sizeof(SpaceType), "spacetype time"); + ARegionType *art; + + st->spaceid = SPACE_TIME; + strncpy(st->name, "Timeline", BKE_ST_MAXNAME); + + st->new = time_new; + st->free = time_free; + st->init = time_init; + st->duplicate = time_duplicate; + st->operatortypes = time_operatortypes; + st->keymap = NULL; + st->listener = time_listener; + st->refresh = time_refresh; + + /* regions: main window */ + art = MEM_callocN(sizeof(ARegionType), "spacetype time region"); + art->regionid = RGN_TYPE_WINDOW; + art->keymapflag = ED_KEYMAP_VIEW2D | ED_KEYMAP_MARKERS | ED_KEYMAP_ANIMATION | ED_KEYMAP_FRAMES; + + art->init = time_main_region_init; + art->draw = time_main_region_draw; + art->listener = time_main_region_listener; + art->keymap = time_keymap; + art->lock = 1; /* Due to pointcache, see T4960. */ + BLI_addhead(&st->regiontypes, art); + + /* regions: header */ + art = MEM_callocN(sizeof(ARegionType), "spacetype time region"); + art->regionid = RGN_TYPE_HEADER; + art->prefsizey = HEADERY; + art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_VIEW2D | ED_KEYMAP_FRAMES | ED_KEYMAP_HEADER; + + art->init = time_header_region_init; + art->draw = time_header_region_draw; + art->listener = time_header_region_listener; + BLI_addhead(&st->regiontypes, art); + + BKE_spacetype_register(st); +} diff --git a/source/blender/editors/space_time/time_ops.c b/source/blender/editors/space_time/time_ops.c new file mode 100644 index 00000000000..a68bd2a9fbb --- /dev/null +++ b/source/blender/editors/space_time/time_ops.c @@ -0,0 +1,226 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2008 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Blender Foundation + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/editors/space_time/time_ops.c + * \ingroup sptime + */ + + +#include <stdlib.h> +#include <math.h> + +#include "DNA_scene_types.h" + +#include "BLI_blenlib.h" +#include "BLI_utildefines.h" + +#include "BKE_context.h" + +#include "ED_anim_api.h" +#include "ED_screen.h" + +#include "WM_api.h" +#include "WM_types.h" + +#include "time_intern.h" + +/* ****************** Start/End Frame Operators *******************************/ +static int time_set_sfra_exec(bContext *C, wmOperator *UNUSED(op)) +{ + Scene *scene = CTX_data_scene(C); + int frame; + + if (scene == NULL) + return OPERATOR_CANCELLED; + + frame = CFRA; + + /* if Preview Range is defined, set the 'start' frame for that */ + if (PRVRANGEON) + scene->r.psfra = frame; + else + scene->r.sfra = frame; + + if (PEFRA < frame) { + if (PRVRANGEON) + scene->r.pefra = frame; + else + scene->r.efra = frame; + } + + WM_event_add_notifier(C, NC_SCENE | ND_FRAME, scene); + + return OPERATOR_FINISHED; +} + +static void TIME_OT_start_frame_set(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Set Start Frame"; + ot->idname = "TIME_OT_start_frame_set"; + ot->description = "Set the start frame"; + + /* api callbacks */ + ot->exec = time_set_sfra_exec; + ot->poll = ED_operator_timeline_active; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; +} + + +static int time_set_efra_exec(bContext *C, wmOperator *UNUSED(op)) +{ + Scene *scene = CTX_data_scene(C); + int frame; + + if (scene == NULL) + return OPERATOR_CANCELLED; + + frame = CFRA; + + /* if Preview Range is defined, set the 'end' frame for that */ + if (PRVRANGEON) + scene->r.pefra = frame; + else + scene->r.efra = frame; + + if (PSFRA > frame) { + if (PRVRANGEON) + scene->r.psfra = frame; + else + scene->r.sfra = frame; + } + + WM_event_add_notifier(C, NC_SCENE | ND_FRAME, scene); + + return OPERATOR_FINISHED; +} + +static void TIME_OT_end_frame_set(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Set End Frame"; + ot->idname = "TIME_OT_end_frame_set"; + ot->description = "Set the end frame"; + + /* api callbacks */ + ot->exec = time_set_efra_exec; + ot->poll = ED_operator_timeline_active; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; +} + +/* ************************ View All Operator *******************************/ + +static int time_view_all_exec(bContext *C, wmOperator *UNUSED(op)) +{ + Scene *scene = CTX_data_scene(C); + ARegion *ar = CTX_wm_region(C); + + if (ELEM(NULL, scene, ar)) + return OPERATOR_CANCELLED; + + View2D *v2d = &ar->v2d; + + /* set extents of view to start/end frames (Preview Range too) */ + v2d->cur.xmin = (float)PSFRA; + v2d->cur.xmax = (float)PEFRA; + + /* we need an extra "buffer" factor on either side so that the endpoints are visible */ + const float extra = 0.01f * BLI_rctf_size_x(&v2d->cur); + v2d->cur.xmin -= extra; + v2d->cur.xmax += extra; + + /* this only affects this TimeLine instance, so just force redraw of this region */ + ED_region_tag_redraw(ar); + + return OPERATOR_FINISHED; +} + +static void TIME_OT_view_all(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "View All"; + ot->idname = "TIME_OT_view_all"; + ot->description = "Show the entire playable frame range"; + + /* api callbacks */ + ot->exec = time_view_all_exec; + ot->poll = ED_operator_timeline_active; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; +} + +/* ************************ View Frame Operator *******************************/ + +static int time_view_frame_exec(bContext *C, wmOperator *op) +{ + const int smooth_viewtx = WM_operator_smooth_viewtx_get(op); + ANIM_center_frame(C, smooth_viewtx); + + return OPERATOR_FINISHED; +} + +static void TIME_OT_view_frame(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "View Frame"; + ot->idname = "TIME_OT_view_frame"; + ot->description = "Reset viewable area to show range around current frame"; + + /* api callbacks */ + ot->exec = time_view_frame_exec; + ot->poll = ED_operator_timeline_active; + + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; +} + +/* ************************** registration **********************************/ + +void time_operatortypes(void) +{ + WM_operatortype_append(TIME_OT_start_frame_set); + WM_operatortype_append(TIME_OT_end_frame_set); + WM_operatortype_append(TIME_OT_view_all); + WM_operatortype_append(TIME_OT_view_frame); +} + +void time_keymap(wmKeyConfig *keyconf) +{ + wmKeyMap *keymap = WM_keymap_ensure(keyconf, "Timeline", SPACE_TIME, 0); + + WM_keymap_add_item(keymap, "TIME_OT_start_frame_set", SKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "TIME_OT_end_frame_set", EKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "TIME_OT_view_all", HOMEKEY, KM_PRESS, 0, 0); +#ifdef WITH_INPUT_NDOF + WM_keymap_add_item(keymap, "TIME_OT_view_all", NDOF_BUTTON_FIT, KM_PRESS, 0, 0); +#endif + WM_keymap_add_item(keymap, "TIME_OT_view_frame", PAD0, KM_PRESS, 0, 0); +} diff --git a/source/blender/editors/space_topbar/space_topbar.c b/source/blender/editors/space_topbar/space_topbar.c index 6113922c02e..db75545fbd6 100644 --- a/source/blender/editors/space_topbar/space_topbar.c +++ b/source/blender/editors/space_topbar/space_topbar.c @@ -128,7 +128,7 @@ static void topbar_main_region_init(wmWindowManager *wm, ARegion *region) } UI_view2d_region_reinit(®ion->v2d, V2D_COMMONVIEW_HEADER, region->winx, region->winy); - keymap = WM_keymap_find(wm->defaultconf, "View2D Buttons List", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "View2D Buttons List", 0, 0); WM_event_add_keymap_handler(®ion->handlers, keymap); } diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 434cb108ef4..674f4e1f778 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -465,74 +465,74 @@ static void view3d_main_region_init(wmWindowManager *wm, ARegion *ar) /* object ops. */ /* important to be before Pose keymap since they can both be enabled at once */ - keymap = WM_keymap_find(wm->defaultconf, "Face Mask", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Face Mask", 0, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); - keymap = WM_keymap_find(wm->defaultconf, "Weight Paint Vertex Selection", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Weight Paint Vertex Selection", 0, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); /* pose is not modal, operator poll checks for this */ - keymap = WM_keymap_find(wm->defaultconf, "Pose", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Pose", 0, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); - keymap = WM_keymap_find(wm->defaultconf, "Object Mode", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Object Mode", 0, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); - keymap = WM_keymap_find(wm->defaultconf, "Paint Curve", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Paint Curve", 0, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); - keymap = WM_keymap_find(wm->defaultconf, "Curve", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Curve", 0, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); - keymap = WM_keymap_find(wm->defaultconf, "Image Paint", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Image Paint", 0, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); - keymap = WM_keymap_find(wm->defaultconf, "Vertex Paint", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Vertex Paint", 0, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); - keymap = WM_keymap_find(wm->defaultconf, "Weight Paint", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Weight Paint", 0, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); - keymap = WM_keymap_find(wm->defaultconf, "Sculpt", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Sculpt", 0, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); - keymap = WM_keymap_find(wm->defaultconf, "Mesh", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Mesh", 0, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); - keymap = WM_keymap_find(wm->defaultconf, "Curve", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Curve", 0, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); - keymap = WM_keymap_find(wm->defaultconf, "Armature", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Armature", 0, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); - keymap = WM_keymap_find(wm->defaultconf, "Pose", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Pose", 0, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); - keymap = WM_keymap_find(wm->defaultconf, "Metaball", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Metaball", 0, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); - keymap = WM_keymap_find(wm->defaultconf, "Lattice", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Lattice", 0, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); - keymap = WM_keymap_find(wm->defaultconf, "Particle", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Particle", 0, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); /* editfont keymap swallows all... */ - keymap = WM_keymap_find(wm->defaultconf, "Font", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Font", 0, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); - keymap = WM_keymap_find(wm->defaultconf, "Object Non-modal", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Object Non-modal", 0, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); - keymap = WM_keymap_find(wm->defaultconf, "Frames", 0, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "Frames", 0, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); /* own keymap, last so modes can override it */ - keymap = WM_keymap_find(wm->defaultconf, "3D View Generic", SPACE_VIEW3D, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "3D View Generic", SPACE_VIEW3D, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); - keymap = WM_keymap_find(wm->defaultconf, "3D View", SPACE_VIEW3D, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "3D View", SPACE_VIEW3D, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); /* add drop boxes */ @@ -1150,7 +1150,7 @@ static void view3d_main_region_cursor(wmWindow *win, ScrArea *sa, ARegion *ar) /* add handlers, stuff you only do once or on area/region changes */ static void view3d_header_region_init(wmWindowManager *wm, ARegion *ar) { - wmKeyMap *keymap = WM_keymap_find(wm->defaultconf, "3D View Generic", SPACE_VIEW3D, 0); + wmKeyMap *keymap = WM_keymap_ensure(wm->defaultconf, "3D View Generic", SPACE_VIEW3D, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); @@ -1231,7 +1231,7 @@ static void view3d_buttons_region_init(wmWindowManager *wm, ARegion *ar) ED_region_panels_init(wm, ar); - keymap = WM_keymap_find(wm->defaultconf, "3D View Generic", SPACE_VIEW3D, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "3D View Generic", SPACE_VIEW3D, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); } @@ -1360,7 +1360,7 @@ static void view3d_tools_region_init(wmWindowManager *wm, ARegion *ar) ED_region_panels_init(wm, ar); - keymap = WM_keymap_find(wm->defaultconf, "3D View Generic", SPACE_VIEW3D, 0); + keymap = WM_keymap_ensure(wm->defaultconf, "3D View Generic", SPACE_VIEW3D, 0); WM_event_add_keymap_handler(&ar->handlers, keymap); } diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c index ff6aa18be09..c53382a60ad 100644 --- a/source/blender/editors/space_view3d/view3d_ops.c +++ b/source/blender/editors/space_view3d/view3d_ops.c @@ -237,13 +237,13 @@ void view3d_keymap(wmKeyConfig *keyconf) wmKeyMap *keymap; wmKeyMapItem *kmi; - keymap = WM_keymap_find(keyconf, "3D View Generic", SPACE_VIEW3D, 0); + keymap = WM_keymap_ensure(keyconf, "3D View Generic", SPACE_VIEW3D, 0); WM_keymap_add_item(keymap, "VIEW3D_OT_properties", NKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "VIEW3D_OT_toolshelf", TKEY, KM_PRESS, 0, 0); /* only for region 3D window */ - keymap = WM_keymap_find(keyconf, "3D View", SPACE_VIEW3D, 0); + keymap = WM_keymap_ensure(keyconf, "3D View", SPACE_VIEW3D, 0); WM_keymap_verify_item(keymap, "VIEW3D_OT_cursor3d", ACTIONMOUSE, KM_CLICK, 0, 0); diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c index 3c5ba6a721f..80c443ab1eb 100644 --- a/source/blender/editors/uvedit/uvedit_ops.c +++ b/source/blender/editors/uvedit/uvedit_ops.c @@ -4397,7 +4397,7 @@ void ED_keymap_uvedit(wmKeyConfig *keyconf) wmKeyMap *keymap; wmKeyMapItem *kmi; - keymap = WM_keymap_find(keyconf, "UV Editor", 0, 0); + keymap = WM_keymap_ensure(keyconf, "UV Editor", 0, 0); keymap->poll = ED_operator_uvedit_can_uv_sculpt; #ifdef USE_WM_KEYMAP_27X |