|
Blender
V2.59
|
00001 00002 /* 00003 * $Id: sequencer_ops.c 35694 2011-03-22 12:53:36Z campbellbarton $ 00004 * 00005 * ***** BEGIN GPL LICENSE BLOCK ***** 00006 * 00007 * This program is free software; you can redistribute it and/or 00008 * modify it under the terms of the GNU General Public License 00009 * as published by the Free Software Foundation; either version 2 00010 * of the License, or (at your option) any later version. 00011 * 00012 * This program is distributed in the hope that it will be useful, 00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00015 * GNU General Public License for more details. 00016 * 00017 * You should have received a copy of the GNU General Public License 00018 * along with this program; if not, write to the Free Software Foundation, 00019 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 00020 * 00021 * The Original Code is Copyright (C) 2008 Blender Foundation. 00022 * All rights reserved. 00023 * 00024 * 00025 * Contributor(s): Blender Foundation 00026 * 00027 * ***** END GPL LICENSE BLOCK ***** 00028 */ 00029 00035 #include <stdlib.h> 00036 #include <math.h> 00037 00038 00039 #include "DNA_space_types.h" 00040 00041 #include "BLI_math.h" 00042 #include "BLI_blenlib.h" 00043 00044 00045 00046 #include "WM_api.h" 00047 #include "WM_types.h" 00048 00049 #include "ED_transform.h" /* transform keymap */ 00050 00051 #include "sequencer_intern.h" 00052 00053 00054 /* ************************** registration **********************************/ 00055 00056 00057 void sequencer_operatortypes(void) 00058 { 00059 /* sequencer_edit.c */ 00060 WM_operatortype_append(SEQUENCER_OT_cut); 00061 WM_operatortype_append(SEQUENCER_OT_mute); 00062 WM_operatortype_append(SEQUENCER_OT_unmute); 00063 WM_operatortype_append(SEQUENCER_OT_lock); 00064 WM_operatortype_append(SEQUENCER_OT_unlock); 00065 WM_operatortype_append(SEQUENCER_OT_reload); 00066 WM_operatortype_append(SEQUENCER_OT_refresh_all); 00067 WM_operatortype_append(SEQUENCER_OT_reassign_inputs); 00068 WM_operatortype_append(SEQUENCER_OT_swap_inputs); 00069 WM_operatortype_append(SEQUENCER_OT_duplicate); 00070 WM_operatortype_append(SEQUENCER_OT_delete); 00071 WM_operatortype_append(SEQUENCER_OT_images_separate); 00072 WM_operatortype_append(SEQUENCER_OT_meta_toggle); 00073 WM_operatortype_append(SEQUENCER_OT_meta_make); 00074 WM_operatortype_append(SEQUENCER_OT_meta_separate); 00075 WM_operatortype_append(SEQUENCER_OT_snap); 00076 WM_operatortype_append(SEQUENCER_OT_next_edit); 00077 WM_operatortype_append(SEQUENCER_OT_previous_edit); 00078 WM_operatortype_append(SEQUENCER_OT_swap); 00079 WM_operatortype_append(SEQUENCER_OT_swap_data); 00080 WM_operatortype_append(SEQUENCER_OT_rendersize); 00081 00082 WM_operatortype_append(SEQUENCER_OT_view_all); 00083 WM_operatortype_append(SEQUENCER_OT_view_selected); 00084 WM_operatortype_append(SEQUENCER_OT_view_all_preview); 00085 WM_operatortype_append(SEQUENCER_OT_view_toggle); 00086 WM_operatortype_append(SEQUENCER_OT_view_zoom_ratio); 00087 WM_operatortype_append(SEQUENCER_OT_view_ghost_border); 00088 00089 /* sequencer_select.c */ 00090 WM_operatortype_append(SEQUENCER_OT_select_all_toggle); 00091 WM_operatortype_append(SEQUENCER_OT_select_inverse); 00092 WM_operatortype_append(SEQUENCER_OT_select); 00093 WM_operatortype_append(SEQUENCER_OT_select_more); 00094 WM_operatortype_append(SEQUENCER_OT_select_less); 00095 WM_operatortype_append(SEQUENCER_OT_select_linked_pick); 00096 WM_operatortype_append(SEQUENCER_OT_select_linked); 00097 WM_operatortype_append(SEQUENCER_OT_select_handles); 00098 WM_operatortype_append(SEQUENCER_OT_select_active_side); 00099 WM_operatortype_append(SEQUENCER_OT_select_border); 00100 00101 /* sequencer_add.c */ 00102 WM_operatortype_append(SEQUENCER_OT_scene_strip_add); 00103 WM_operatortype_append(SEQUENCER_OT_movie_strip_add); 00104 WM_operatortype_append(SEQUENCER_OT_sound_strip_add); 00105 WM_operatortype_append(SEQUENCER_OT_image_strip_add); 00106 WM_operatortype_append(SEQUENCER_OT_effect_strip_add); 00107 WM_operatortype_append(SEQUENCER_OT_properties); 00108 00109 WM_operatortype_append(SEQUENCER_OT_copy); 00110 WM_operatortype_append(SEQUENCER_OT_paste); 00111 } 00112 00113 00114 void sequencer_keymap(wmKeyConfig *keyconf) 00115 { 00116 wmKeyMap *keymap= WM_keymap_find(keyconf, "SequencerCommon", SPACE_SEQ, 0); 00117 wmKeyMapItem *kmi; 00118 00119 kmi= WM_keymap_add_item(keymap, "WM_OT_context_toggle", OKEY, KM_PRESS, KM_SHIFT, 0); 00120 RNA_string_set(kmi->ptr, "data_path", "scene.sequence_editor.show_overlay"); 00121 00122 /* operators common to sequence and preview view */ 00123 WM_keymap_add_item(keymap, "SEQUENCER_OT_view_toggle", TABKEY, KM_PRESS, KM_CTRL, 0); 00124 00125 /* operators for sequence */ 00126 keymap= WM_keymap_find(keyconf, "Sequencer", SPACE_SEQ, 0); 00127 00128 WM_keymap_add_item(keymap, "SEQUENCER_OT_properties", NKEY, KM_PRESS, 0, 0); 00129 00130 WM_keymap_add_item(keymap, "SEQUENCER_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0); 00131 WM_keymap_add_item(keymap, "SEQUENCER_OT_select_inverse", IKEY, KM_PRESS, KM_CTRL, 0); 00132 00133 RNA_enum_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_cut", KKEY, KM_PRESS, 0, 0)->ptr, "type", SEQ_CUT_SOFT); 00134 RNA_enum_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_cut", KKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "type", SEQ_CUT_HARD); 00135 00136 WM_keymap_add_item(keymap, "SEQUENCER_OT_mute", HKEY, KM_PRESS, 0, 0); 00137 RNA_boolean_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_mute", HKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "unselected", 1); 00138 00139 WM_keymap_add_item(keymap, "SEQUENCER_OT_unmute", HKEY, KM_PRESS, KM_ALT, 0); 00140 RNA_boolean_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_unmute", HKEY, KM_PRESS, KM_ALT|KM_SHIFT, 0)->ptr, "unselected", 1); 00141 00142 WM_keymap_add_item(keymap, "SEQUENCER_OT_lock", LKEY, KM_PRESS, KM_SHIFT, 0); 00143 WM_keymap_add_item(keymap, "SEQUENCER_OT_unlock", LKEY, KM_PRESS, KM_SHIFT|KM_ALT, 0); 00144 00145 WM_keymap_add_item(keymap, "SEQUENCER_OT_reassign_inputs", RKEY, KM_PRESS, 0, 0); 00146 WM_keymap_add_item(keymap, "SEQUENCER_OT_reload", RKEY, KM_PRESS, KM_ALT, 0); 00147 00148 WM_keymap_add_item(keymap, "SEQUENCER_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0); 00149 00150 WM_keymap_add_item(keymap, "SEQUENCER_OT_delete", XKEY, KM_PRESS, 0, 0); 00151 WM_keymap_add_item(keymap, "SEQUENCER_OT_delete", DELKEY, KM_PRESS, 0, 0); 00152 00153 WM_keymap_add_item(keymap, "SEQUENCER_OT_copy", CKEY, KM_PRESS, KM_CTRL, 0); 00154 WM_keymap_add_item(keymap, "SEQUENCER_OT_paste", VKEY, KM_PRESS, KM_CTRL, 0); 00155 00156 WM_keymap_add_item(keymap, "SEQUENCER_OT_images_separate", YKEY, KM_PRESS, 0, 0); 00157 00158 WM_keymap_add_item(keymap, "SEQUENCER_OT_meta_toggle", TABKEY, KM_PRESS, 0, 0); 00159 00160 WM_keymap_add_item(keymap, "SEQUENCER_OT_meta_make", GKEY, KM_PRESS, KM_SHIFT, 0); 00161 WM_keymap_add_item(keymap, "SEQUENCER_OT_meta_separate", GKEY, KM_PRESS, KM_ALT, 0); 00162 00163 WM_keymap_add_item(keymap, "SEQUENCER_OT_view_all", HOMEKEY, KM_PRESS, 0, 0); 00164 WM_keymap_add_item(keymap, "SEQUENCER_OT_view_selected", PADPERIOD, KM_PRESS, 0, 0); 00165 00166 WM_keymap_add_item(keymap, "SEQUENCER_OT_next_edit", PAGEUPKEY, KM_PRESS, 0, 0); 00167 WM_keymap_add_item(keymap, "SEQUENCER_OT_previous_edit", PAGEDOWNKEY, KM_PRESS, 0, 0); 00168 00169 RNA_enum_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_swap", LEFTARROWKEY, KM_PRESS, KM_ALT, 0)->ptr, "side", SEQ_SIDE_LEFT); 00170 RNA_enum_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_swap", RIGHTARROWKEY, KM_PRESS, KM_ALT, 0)->ptr, "side", SEQ_SIDE_RIGHT); 00171 00172 WM_keymap_add_item(keymap, "SEQUENCER_OT_snap", SKEY, KM_PRESS, KM_SHIFT, 0); 00173 WM_keymap_add_item(keymap, "SEQUENCER_OT_swap_inputs", SKEY, KM_PRESS, KM_ALT, 0); 00174 00175 /* multicam editing keyboard layout, switch to camera 1-10 using 00176 regular number keys */ 00177 { 00178 int keys[] = { ONEKEY, TWOKEY, THREEKEY, FOURKEY, FIVEKEY, 00179 SIXKEY, SEVENKEY, EIGHTKEY, NINEKEY, ZEROKEY }; 00180 int i; 00181 00182 for (i = 1; i <= 10; i++) { 00183 RNA_int_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_cut_multicam", keys[i-1], KM_PRESS, 0, 0)->ptr, "camera", i); 00184 } 00185 } 00186 00187 /* Mouse selection, a bit verbose :/ */ 00188 WM_keymap_add_item(keymap, "SEQUENCER_OT_select", SELECTMOUSE, KM_PRESS, 0, 0); 00189 RNA_boolean_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_select", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "extend", 1); 00190 00191 00192 /* 2.4x method, now use Alt for handles and select the side based on which handle was selected */ 00193 /* 00194 RNA_boolean_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_select", SELECTMOUSE, KM_PRESS, KM_CTRL, 0)->ptr, "linked_left", 1); 00195 RNA_boolean_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_select", SELECTMOUSE, KM_PRESS, KM_ALT, 0)->ptr, "linked_right", 1); 00196 00197 kmi= WM_keymap_add_item(keymap, "SEQUENCER_OT_select", SELECTMOUSE, KM_PRESS, KM_CTRL|KM_ALT, 0); 00198 RNA_boolean_set(kmi->ptr, "linked_left", 1); 00199 RNA_boolean_set(kmi->ptr, "linked_right", 1); 00200 00201 kmi= WM_keymap_add_item(keymap, "SEQUENCER_OT_select", SELECTMOUSE, KM_PRESS, KM_SHIFT|KM_CTRL|KM_ALT, 0); 00202 RNA_boolean_set(kmi->ptr, "extend", 1); 00203 RNA_boolean_set(kmi->ptr, "linked_left", 1); 00204 RNA_boolean_set(kmi->ptr, "linked_right", 1); 00205 00206 kmi= WM_keymap_add_item(keymap, "SEQUENCER_OT_select", SELECTMOUSE, KM_PRESS, KM_SHIFT|KM_CTRL, 0); 00207 RNA_boolean_set(kmi->ptr, "extend", 1); 00208 RNA_boolean_set(kmi->ptr, "linked_left", 1); 00209 00210 kmi= WM_keymap_add_item(keymap, "SEQUENCER_OT_select", SELECTMOUSE, KM_PRESS, KM_SHIFT|KM_ALT, 0); 00211 RNA_boolean_set(kmi->ptr, "extend", 1); 00212 RNA_boolean_set(kmi->ptr, "linked_right", 1); 00213 */ 00214 00215 /* 2.5 method, Alt and use selected handle */ 00216 RNA_boolean_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_select", SELECTMOUSE, KM_PRESS, KM_ALT, 0)->ptr, "linked_handle", 1); 00217 00218 kmi= WM_keymap_add_item(keymap, "SEQUENCER_OT_select", SELECTMOUSE, KM_PRESS, KM_SHIFT|KM_ALT, 0); 00219 RNA_boolean_set(kmi->ptr, "extend", 1); 00220 RNA_boolean_set(kmi->ptr, "linked_handle", 1); 00221 00222 /* match action editor */ 00223 kmi= WM_keymap_add_item(keymap, "SEQUENCER_OT_select", SELECTMOUSE, KM_PRESS, KM_CTRL, 0); 00224 RNA_boolean_set(kmi->ptr, "left_right", 1); /* grr, these conflict - only use left_right if not over an active seq */ 00225 RNA_boolean_set(kmi->ptr, "linked_time", 1); 00226 /* adjusted since 2.4 */ 00227 00228 kmi= WM_keymap_add_item(keymap, "SEQUENCER_OT_select", SELECTMOUSE, KM_PRESS, KM_SHIFT|KM_CTRL, 0); 00229 RNA_boolean_set(kmi->ptr, "extend", 1); 00230 RNA_boolean_set(kmi->ptr, "linked_time", 1); 00231 00232 WM_keymap_add_item(keymap, "SEQUENCER_OT_select_more", PADPLUSKEY, KM_PRESS, KM_CTRL, 0); 00233 WM_keymap_add_item(keymap, "SEQUENCER_OT_select_less", PADMINUS, KM_PRESS, KM_CTRL, 0); 00234 00235 WM_keymap_add_item(keymap, "SEQUENCER_OT_select_linked_pick", LKEY, KM_PRESS, 0, 0); 00236 RNA_boolean_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_select_linked_pick", LKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "extend", 1); 00237 00238 WM_keymap_add_item(keymap, "SEQUENCER_OT_select_linked", LKEY, KM_PRESS, KM_CTRL, 0); 00239 00240 WM_keymap_add_item(keymap, "SEQUENCER_OT_select_border", BKEY, KM_PRESS, 0, 0); 00241 00242 WM_keymap_add_menu(keymap, "SEQUENCER_MT_add", AKEY, KM_PRESS, KM_SHIFT, 0); 00243 00244 kmi= WM_keymap_add_item(keymap, "WM_OT_context_set_int", OKEY, KM_PRESS, 0, 0); 00245 RNA_string_set(kmi->ptr, "data_path", "scene.sequence_editor.overlay_frame"); 00246 RNA_int_set(kmi->ptr, "value", 0); 00247 00248 transform_keymap_for_space(keyconf, keymap, SPACE_SEQ); 00249 00250 keymap= WM_keymap_find(keyconf, "SequencerPreview", SPACE_SEQ, 0); 00251 WM_keymap_add_item(keymap, "SEQUENCER_OT_view_all_preview", HOMEKEY, KM_PRESS, 0, 0); 00252 WM_keymap_add_item(keymap, "SEQUENCER_OT_properties", NKEY, KM_PRESS, 0, 0); 00253 00254 WM_keymap_add_item(keymap, "SEQUENCER_OT_view_ghost_border", OKEY, KM_PRESS, 0, 0); 00255 00256 /* would prefer to use numpad keys for job */ 00257 RNA_float_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_view_zoom_ratio", PAD1, KM_PRESS, 0, 0)->ptr, "ratio", 1.0f); 00258 00259 /* Setting zoom levels is not that useful, except for back to zoom level 1, removing keymap because of conflicts for now */ 00260 #if 0 00261 RNA_float_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_view_zoom_ratio", PAD8, KM_PRESS, KM_SHIFT, 0)->ptr, "ratio", 8.0f); 00262 RNA_float_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_view_zoom_ratio", PAD4, KM_PRESS, KM_SHIFT, 0)->ptr, "ratio", 4.0f); 00263 RNA_float_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_view_zoom_ratio", PAD2, KM_PRESS, KM_SHIFT, 0)->ptr, "ratio", 2.0f); 00264 00265 RNA_float_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_view_zoom_ratio", PAD2, KM_PRESS, 0, 0)->ptr, "ratio", 0.5f); 00266 RNA_float_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_view_zoom_ratio", PAD4, KM_PRESS, 0, 0)->ptr, "ratio", 0.25f); 00267 RNA_float_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_view_zoom_ratio", PAD8, KM_PRESS, 0, 0)->ptr, "ratio", 0.125f); 00268 #endif 00269 00270 } 00271