Blender  V2.59
sequencer_ops.c
Go to the documentation of this file.
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