5 * ***** BEGIN GPL LICENSE BLOCK *****
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21 * The Original Code is Copyright (C) 2008 Blender Foundation.
22 * All rights reserved.
25 * Contributor(s): Blender Foundation
27 * ***** END GPL LICENSE BLOCK *****
30 /** \file blender/editors/space_sequencer/sequencer_ops.c
39 #include "DNA_space_types.h"
42 #include "BLI_blenlib.h"
49 #include "ED_transform.h" /* transform keymap */
51 #include "sequencer_intern.h"
54 /* ************************** registration **********************************/
57 void sequencer_operatortypes(void)
59 /* sequencer_edit.c */
60 WM_operatortype_append(SEQUENCER_OT_cut);
61 WM_operatortype_append(SEQUENCER_OT_mute);
62 WM_operatortype_append(SEQUENCER_OT_unmute);
63 WM_operatortype_append(SEQUENCER_OT_lock);
64 WM_operatortype_append(SEQUENCER_OT_unlock);
65 WM_operatortype_append(SEQUENCER_OT_reload);
66 WM_operatortype_append(SEQUENCER_OT_refresh_all);
67 WM_operatortype_append(SEQUENCER_OT_reassign_inputs);
68 WM_operatortype_append(SEQUENCER_OT_swap_inputs);
69 WM_operatortype_append(SEQUENCER_OT_duplicate);
70 WM_operatortype_append(SEQUENCER_OT_delete);
71 WM_operatortype_append(SEQUENCER_OT_offset_clear);
72 WM_operatortype_append(SEQUENCER_OT_images_separate);
73 WM_operatortype_append(SEQUENCER_OT_meta_toggle);
74 WM_operatortype_append(SEQUENCER_OT_meta_make);
75 WM_operatortype_append(SEQUENCER_OT_meta_separate);
76 WM_operatortype_append(SEQUENCER_OT_snap);
77 WM_operatortype_append(SEQUENCER_OT_next_edit);
78 WM_operatortype_append(SEQUENCER_OT_previous_edit);
79 WM_operatortype_append(SEQUENCER_OT_swap);
80 WM_operatortype_append(SEQUENCER_OT_swap_data);
81 WM_operatortype_append(SEQUENCER_OT_rendersize);
83 WM_operatortype_append(SEQUENCER_OT_view_all);
84 WM_operatortype_append(SEQUENCER_OT_view_selected);
85 WM_operatortype_append(SEQUENCER_OT_view_all_preview);
86 WM_operatortype_append(SEQUENCER_OT_view_toggle);
87 WM_operatortype_append(SEQUENCER_OT_view_zoom_ratio);
88 WM_operatortype_append(SEQUENCER_OT_view_ghost_border);
90 WM_operatortype_append(SEQUENCER_OT_change_effect_input);
91 WM_operatortype_append(SEQUENCER_OT_change_effect_type);
92 WM_operatortype_append(SEQUENCER_OT_change_path);
94 /* sequencer_select.c */
95 WM_operatortype_append(SEQUENCER_OT_select_all_toggle);
96 WM_operatortype_append(SEQUENCER_OT_select_inverse);
97 WM_operatortype_append(SEQUENCER_OT_select);
98 WM_operatortype_append(SEQUENCER_OT_select_more);
99 WM_operatortype_append(SEQUENCER_OT_select_less);
100 WM_operatortype_append(SEQUENCER_OT_select_linked_pick);
101 WM_operatortype_append(SEQUENCER_OT_select_linked);
102 WM_operatortype_append(SEQUENCER_OT_select_handles);
103 WM_operatortype_append(SEQUENCER_OT_select_active_side);
104 WM_operatortype_append(SEQUENCER_OT_select_border);
106 /* sequencer_add.c */
107 WM_operatortype_append(SEQUENCER_OT_scene_strip_add);
108 WM_operatortype_append(SEQUENCER_OT_movie_strip_add);
109 WM_operatortype_append(SEQUENCER_OT_sound_strip_add);
110 WM_operatortype_append(SEQUENCER_OT_image_strip_add);
111 WM_operatortype_append(SEQUENCER_OT_effect_strip_add);
112 WM_operatortype_append(SEQUENCER_OT_properties);
114 WM_operatortype_append(SEQUENCER_OT_copy);
115 WM_operatortype_append(SEQUENCER_OT_paste);
119 void sequencer_keymap(wmKeyConfig *keyconf)
121 wmKeyMap *keymap= WM_keymap_find(keyconf, "SequencerCommon", SPACE_SEQ, 0);
124 kmi= WM_keymap_add_item(keymap, "WM_OT_context_toggle", OKEY, KM_PRESS, KM_SHIFT, 0);
125 RNA_string_set(kmi->ptr, "data_path", "scene.sequence_editor.show_overlay");
127 /* operators common to sequence and preview view */
128 WM_keymap_add_item(keymap, "SEQUENCER_OT_view_toggle", TABKEY, KM_PRESS, KM_CTRL, 0);
130 /* operators for sequence */
131 keymap= WM_keymap_find(keyconf, "Sequencer", SPACE_SEQ, 0);
133 WM_keymap_add_item(keymap, "SEQUENCER_OT_properties", NKEY, KM_PRESS, 0, 0);
135 WM_keymap_add_item(keymap, "SEQUENCER_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0);
136 WM_keymap_add_item(keymap, "SEQUENCER_OT_select_inverse", IKEY, KM_PRESS, KM_CTRL, 0);
138 RNA_enum_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_cut", KKEY, KM_PRESS, 0, 0)->ptr, "type", SEQ_CUT_SOFT);
139 RNA_enum_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_cut", KKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "type", SEQ_CUT_HARD);
141 WM_keymap_add_item(keymap, "SEQUENCER_OT_mute", HKEY, KM_PRESS, 0, 0);
142 RNA_boolean_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_mute", HKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "unselected", 1);
144 WM_keymap_add_item(keymap, "SEQUENCER_OT_unmute", HKEY, KM_PRESS, KM_ALT, 0);
145 RNA_boolean_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_unmute", HKEY, KM_PRESS, KM_ALT|KM_SHIFT, 0)->ptr, "unselected", 1);
147 WM_keymap_add_item(keymap, "SEQUENCER_OT_lock", LKEY, KM_PRESS, KM_SHIFT, 0);
148 WM_keymap_add_item(keymap, "SEQUENCER_OT_unlock", LKEY, KM_PRESS, KM_SHIFT|KM_ALT, 0);
150 WM_keymap_add_item(keymap, "SEQUENCER_OT_reassign_inputs", RKEY, KM_PRESS, 0, 0);
151 WM_keymap_add_item(keymap, "SEQUENCER_OT_reload", RKEY, KM_PRESS, KM_ALT, 0);
153 WM_keymap_add_item(keymap, "SEQUENCER_OT_offset_clear", OKEY, KM_PRESS, KM_ALT, 0);
155 WM_keymap_add_item(keymap, "SEQUENCER_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0);
157 WM_keymap_add_item(keymap, "SEQUENCER_OT_delete", XKEY, KM_PRESS, 0, 0);
158 WM_keymap_add_item(keymap, "SEQUENCER_OT_delete", DELKEY, KM_PRESS, 0, 0);
160 WM_keymap_add_item(keymap, "SEQUENCER_OT_copy", CKEY, KM_PRESS, KM_CTRL, 0);
161 WM_keymap_add_item(keymap, "SEQUENCER_OT_paste", VKEY, KM_PRESS, KM_CTRL, 0);
163 WM_keymap_add_item(keymap, "SEQUENCER_OT_images_separate", YKEY, KM_PRESS, 0, 0);
165 WM_keymap_add_item(keymap, "SEQUENCER_OT_meta_toggle", TABKEY, KM_PRESS, 0, 0);
167 WM_keymap_add_item(keymap, "SEQUENCER_OT_meta_make", GKEY, KM_PRESS, KM_SHIFT, 0);
168 WM_keymap_add_item(keymap, "SEQUENCER_OT_meta_separate", GKEY, KM_PRESS, KM_ALT, 0);
170 WM_keymap_add_item(keymap, "SEQUENCER_OT_view_all", HOMEKEY, KM_PRESS, 0, 0);
171 WM_keymap_add_item(keymap, "SEQUENCER_OT_view_selected", PADPERIOD, KM_PRESS, 0, 0);
173 WM_keymap_add_item(keymap, "SEQUENCER_OT_next_edit", PAGEUPKEY, KM_PRESS, 0, 0);
174 WM_keymap_add_item(keymap, "SEQUENCER_OT_previous_edit", PAGEDOWNKEY, KM_PRESS, 0, 0);
176 RNA_enum_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_swap", LEFTARROWKEY, KM_PRESS, KM_ALT, 0)->ptr, "side", SEQ_SIDE_LEFT);
177 RNA_enum_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_swap", RIGHTARROWKEY, KM_PRESS, KM_ALT, 0)->ptr, "side", SEQ_SIDE_RIGHT);
179 WM_keymap_add_item(keymap, "SEQUENCER_OT_snap", SKEY, KM_PRESS, KM_SHIFT, 0);
180 WM_keymap_add_item(keymap, "SEQUENCER_OT_swap_inputs", SKEY, KM_PRESS, KM_ALT, 0);
182 /* multicam editing keyboard layout, switch to camera 1-10 using
183 regular number keys */
185 int keys[] = { ONEKEY, TWOKEY, THREEKEY, FOURKEY, FIVEKEY,
186 SIXKEY, SEVENKEY, EIGHTKEY, NINEKEY, ZEROKEY };
189 for (i = 1; i <= 10; i++) {
190 RNA_int_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_cut_multicam", keys[i-1], KM_PRESS, 0, 0)->ptr, "camera", i);
194 /* Mouse selection, a bit verbose :/ */
195 WM_keymap_add_item(keymap, "SEQUENCER_OT_select", SELECTMOUSE, KM_PRESS, 0, 0);
196 RNA_boolean_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_select", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "extend", 1);
199 /* 2.4x method, now use Alt for handles and select the side based on which handle was selected */
201 RNA_boolean_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_select", SELECTMOUSE, KM_PRESS, KM_CTRL, 0)->ptr, "linked_left", 1);
202 RNA_boolean_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_select", SELECTMOUSE, KM_PRESS, KM_ALT, 0)->ptr, "linked_right", 1);
204 kmi= WM_keymap_add_item(keymap, "SEQUENCER_OT_select", SELECTMOUSE, KM_PRESS, KM_CTRL|KM_ALT, 0);
205 RNA_boolean_set(kmi->ptr, "linked_left", 1);
206 RNA_boolean_set(kmi->ptr, "linked_right", 1);
208 kmi= WM_keymap_add_item(keymap, "SEQUENCER_OT_select", SELECTMOUSE, KM_PRESS, KM_SHIFT|KM_CTRL|KM_ALT, 0);
209 RNA_boolean_set(kmi->ptr, "extend", 1);
210 RNA_boolean_set(kmi->ptr, "linked_left", 1);
211 RNA_boolean_set(kmi->ptr, "linked_right", 1);
213 kmi= WM_keymap_add_item(keymap, "SEQUENCER_OT_select", SELECTMOUSE, KM_PRESS, KM_SHIFT|KM_CTRL, 0);
214 RNA_boolean_set(kmi->ptr, "extend", 1);
215 RNA_boolean_set(kmi->ptr, "linked_left", 1);
217 kmi= WM_keymap_add_item(keymap, "SEQUENCER_OT_select", SELECTMOUSE, KM_PRESS, KM_SHIFT|KM_ALT, 0);
218 RNA_boolean_set(kmi->ptr, "extend", 1);
219 RNA_boolean_set(kmi->ptr, "linked_right", 1);
222 /* 2.5 method, Alt and use selected handle */
223 RNA_boolean_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_select", SELECTMOUSE, KM_PRESS, KM_ALT, 0)->ptr, "linked_handle", 1);
225 kmi= WM_keymap_add_item(keymap, "SEQUENCER_OT_select", SELECTMOUSE, KM_PRESS, KM_SHIFT|KM_ALT, 0);
226 RNA_boolean_set(kmi->ptr, "extend", 1);
227 RNA_boolean_set(kmi->ptr, "linked_handle", 1);
229 /* match action editor */
230 kmi= WM_keymap_add_item(keymap, "SEQUENCER_OT_select", SELECTMOUSE, KM_PRESS, KM_CTRL, 0);
231 RNA_boolean_set(kmi->ptr, "left_right", 1); /* grr, these conflict - only use left_right if not over an active seq */
232 RNA_boolean_set(kmi->ptr, "linked_time", 1);
233 /* adjusted since 2.4 */
235 kmi= WM_keymap_add_item(keymap, "SEQUENCER_OT_select", SELECTMOUSE, KM_PRESS, KM_SHIFT|KM_CTRL, 0);
236 RNA_boolean_set(kmi->ptr, "extend", 1);
237 RNA_boolean_set(kmi->ptr, "linked_time", 1);
239 WM_keymap_add_item(keymap, "SEQUENCER_OT_select_more", PADPLUSKEY, KM_PRESS, KM_CTRL, 0);
240 WM_keymap_add_item(keymap, "SEQUENCER_OT_select_less", PADMINUS, KM_PRESS, KM_CTRL, 0);
242 WM_keymap_add_item(keymap, "SEQUENCER_OT_select_linked_pick", LKEY, KM_PRESS, 0, 0);
243 RNA_boolean_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_select_linked_pick", LKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "extend", 1);
245 WM_keymap_add_item(keymap, "SEQUENCER_OT_select_linked", LKEY, KM_PRESS, KM_CTRL, 0);
247 WM_keymap_add_item(keymap, "SEQUENCER_OT_select_border", BKEY, KM_PRESS, 0, 0);
249 WM_keymap_add_menu(keymap, "SEQUENCER_MT_add", AKEY, KM_PRESS, KM_SHIFT, 0);
251 WM_keymap_add_menu(keymap, "SEQUENCER_MT_change", CKEY, KM_PRESS, 0, 0);
253 kmi= WM_keymap_add_item(keymap, "WM_OT_context_set_int", OKEY, KM_PRESS, 0, 0);
254 RNA_string_set(kmi->ptr, "data_path", "scene.sequence_editor.overlay_frame");
255 RNA_int_set(kmi->ptr, "value", 0);
257 transform_keymap_for_space(keyconf, keymap, SPACE_SEQ);
259 keymap= WM_keymap_find(keyconf, "SequencerPreview", SPACE_SEQ, 0);
260 WM_keymap_add_item(keymap, "SEQUENCER_OT_view_all_preview", HOMEKEY, KM_PRESS, 0, 0);
261 WM_keymap_add_item(keymap, "SEQUENCER_OT_properties", NKEY, KM_PRESS, 0, 0);
263 WM_keymap_add_item(keymap, "SEQUENCER_OT_view_ghost_border", OKEY, KM_PRESS, 0, 0);
265 /* would prefer to use numpad keys for job */
266 RNA_float_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_view_zoom_ratio", PAD1, KM_PRESS, 0, 0)->ptr, "ratio", 1.0f);
268 /* Setting zoom levels is not that useful, except for back to zoom level 1, removing keymap because of conflicts for now */
270 RNA_float_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_view_zoom_ratio", PAD8, KM_PRESS, KM_SHIFT, 0)->ptr, "ratio", 8.0f);
271 RNA_float_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_view_zoom_ratio", PAD4, KM_PRESS, KM_SHIFT, 0)->ptr, "ratio", 4.0f);
272 RNA_float_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_view_zoom_ratio", PAD2, KM_PRESS, KM_SHIFT, 0)->ptr, "ratio", 2.0f);
274 RNA_float_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_view_zoom_ratio", PAD2, KM_PRESS, 0, 0)->ptr, "ratio", 0.5f);
275 RNA_float_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_view_zoom_ratio", PAD4, KM_PRESS, 0, 0)->ptr, "ratio", 0.25f);
276 RNA_float_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_view_zoom_ratio", PAD8, KM_PRESS, 0, 0)->ptr, "ratio", 0.125f);