|
Blender
V2.59
|
00001 /* 00002 * $Id: action_ops.c 35971 2011-04-03 10:04:16Z campbellbarton $ 00003 * 00004 * ***** BEGIN GPL LICENSE BLOCK ***** 00005 * 00006 * This program is free software; you can redistribute it and/or 00007 * modify it under the terms of the GNU General Public License 00008 * as published by the Free Software Foundation; either version 2 00009 * of the License, or (at your option) any later version. 00010 * 00011 * This program is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 * GNU General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU General Public License 00017 * along with this program; if not, write to the Free Software Foundation, 00018 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 00019 * 00020 * The Original Code is Copyright (C) 2008 Blender Foundation. 00021 * All rights reserved. 00022 * 00023 * 00024 * Contributor(s): Blender Foundation 00025 * 00026 * ***** END GPL LICENSE BLOCK ***** 00027 */ 00028 00034 #include <stdlib.h> 00035 #include <math.h> 00036 00037 00038 #include "DNA_space_types.h" 00039 00040 #include "BLI_blenlib.h" 00041 00042 #include "ED_anim_api.h" 00043 #include "ED_transform.h" 00044 00045 #include "action_intern.h" 00046 00047 #include "RNA_access.h" 00048 00049 #include "WM_api.h" 00050 #include "WM_types.h" 00051 00052 /* ************************** registration - operator types **********************************/ 00053 00054 void action_operatortypes(void) 00055 { 00056 /* keyframes */ 00057 /* selection */ 00058 WM_operatortype_append(ACTION_OT_clickselect); 00059 WM_operatortype_append(ACTION_OT_select_all_toggle); 00060 WM_operatortype_append(ACTION_OT_select_border); 00061 WM_operatortype_append(ACTION_OT_select_column); 00062 WM_operatortype_append(ACTION_OT_select_linked); 00063 WM_operatortype_append(ACTION_OT_select_more); 00064 WM_operatortype_append(ACTION_OT_select_less); 00065 WM_operatortype_append(ACTION_OT_select_leftright); 00066 00067 /* editing */ 00068 WM_operatortype_append(ACTION_OT_snap); 00069 WM_operatortype_append(ACTION_OT_mirror); 00070 WM_operatortype_append(ACTION_OT_frame_jump); 00071 WM_operatortype_append(ACTION_OT_handle_type); 00072 WM_operatortype_append(ACTION_OT_interpolation_type); 00073 WM_operatortype_append(ACTION_OT_extrapolation_type); 00074 WM_operatortype_append(ACTION_OT_keyframe_type); 00075 WM_operatortype_append(ACTION_OT_sample); 00076 WM_operatortype_append(ACTION_OT_clean); 00077 WM_operatortype_append(ACTION_OT_delete); 00078 WM_operatortype_append(ACTION_OT_duplicate); 00079 WM_operatortype_append(ACTION_OT_keyframe_insert); 00080 WM_operatortype_append(ACTION_OT_copy); 00081 WM_operatortype_append(ACTION_OT_paste); 00082 WM_operatortype_append(ACTION_OT_new); 00083 00084 WM_operatortype_append(ACTION_OT_previewrange_set); 00085 WM_operatortype_append(ACTION_OT_view_all); 00086 WM_operatortype_append(ACTION_OT_view_selected); 00087 00088 WM_operatortype_append(ACTION_OT_markers_make_local); 00089 } 00090 00091 void ED_operatormacros_action(void) 00092 { 00093 wmOperatorType *ot; 00094 wmOperatorTypeMacro *otmacro; 00095 00096 ot= WM_operatortype_append_macro("ACTION_OT_duplicate_move", "Duplicate", OPTYPE_UNDO|OPTYPE_REGISTER); 00097 if (ot) { 00098 WM_operatortype_macro_define(ot, "ACTION_OT_duplicate"); 00099 otmacro= WM_operatortype_macro_define(ot, "TRANSFORM_OT_transform"); 00100 RNA_enum_set(otmacro->ptr, "mode", TFM_TIME_DUPLICATE); 00101 } 00102 00103 } 00104 00105 /* ************************** registration - keymaps **********************************/ 00106 00107 static void action_keymap_keyframes (wmKeyConfig *keyconf, wmKeyMap *keymap) 00108 { 00109 wmKeyMapItem *kmi; 00110 00111 /* action_select.c - selection tools */ 00112 /* click-select */ 00113 WM_keymap_add_item(keymap, "ACTION_OT_clickselect", SELECTMOUSE, KM_PRESS, 0, 0); 00114 kmi= WM_keymap_add_item(keymap, "ACTION_OT_clickselect", SELECTMOUSE, KM_PRESS, KM_ALT, 0); 00115 RNA_boolean_set(kmi->ptr, "column", 1); 00116 kmi= WM_keymap_add_item(keymap, "ACTION_OT_clickselect", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0); 00117 RNA_boolean_set(kmi->ptr, "extend", 1); 00118 kmi= WM_keymap_add_item(keymap, "ACTION_OT_clickselect", SELECTMOUSE, KM_PRESS, KM_ALT|KM_SHIFT, 0); 00119 RNA_boolean_set(kmi->ptr, "extend", 1); 00120 RNA_boolean_set(kmi->ptr, "column", 1); 00121 00122 /* select left/right */ 00123 WM_keymap_add_item(keymap, "ACTION_OT_select_leftright", SELECTMOUSE, KM_PRESS, KM_CTRL, 0); 00124 kmi= WM_keymap_add_item(keymap, "ACTION_OT_select_leftright", SELECTMOUSE, KM_PRESS, KM_CTRL|KM_SHIFT, 0); 00125 RNA_boolean_set(kmi->ptr, "extend", 1); 00126 00127 kmi= WM_keymap_add_item(keymap, "ACTION_OT_select_leftright", LEFTBRACKETKEY, KM_PRESS, 0, 0); 00128 RNA_enum_set(kmi->ptr, "mode", ACTKEYS_LRSEL_LEFT); 00129 kmi= WM_keymap_add_item(keymap, "ACTION_OT_select_leftright", RIGHTBRACKETKEY, KM_PRESS, 0, 0); 00130 RNA_enum_set(kmi->ptr, "mode", ACTKEYS_LRSEL_RIGHT); 00131 00132 /* deselect all */ 00133 WM_keymap_add_item(keymap, "ACTION_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0); 00134 RNA_boolean_set(WM_keymap_add_item(keymap, "ACTION_OT_select_all_toggle", IKEY, KM_PRESS, KM_CTRL, 0)->ptr, "invert", 1); 00135 00136 /* borderselect */ 00137 WM_keymap_add_item(keymap, "ACTION_OT_select_border", BKEY, KM_PRESS, 0, 0); 00138 RNA_boolean_set(WM_keymap_add_item(keymap, "ACTION_OT_select_border", BKEY, KM_PRESS, KM_ALT, 0)->ptr, "axis_range", 1); 00139 00140 /* column select */ 00141 RNA_enum_set(WM_keymap_add_item(keymap, "ACTION_OT_select_column", KKEY, KM_PRESS, 0, 0)->ptr, "mode", ACTKEYS_COLUMNSEL_KEYS); 00142 RNA_enum_set(WM_keymap_add_item(keymap, "ACTION_OT_select_column", KKEY, KM_PRESS, KM_CTRL, 0)->ptr, "mode", ACTKEYS_COLUMNSEL_CFRA); 00143 RNA_enum_set(WM_keymap_add_item(keymap, "ACTION_OT_select_column", KKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "mode", ACTKEYS_COLUMNSEL_MARKERS_COLUMN); 00144 RNA_enum_set(WM_keymap_add_item(keymap, "ACTION_OT_select_column", KKEY, KM_PRESS, KM_ALT, 0)->ptr, "mode", ACTKEYS_COLUMNSEL_MARKERS_BETWEEN); 00145 00146 /* select more/less */ 00147 WM_keymap_add_item(keymap, "ACTION_OT_select_more", PADPLUSKEY, KM_PRESS, KM_CTRL, 0); 00148 WM_keymap_add_item(keymap, "ACTION_OT_select_less", PADMINUS, KM_PRESS, KM_CTRL, 0); 00149 00150 /* select linekd */ 00151 WM_keymap_add_item(keymap, "ACTION_OT_select_linked", LKEY, KM_PRESS, 0, 0); 00152 00153 00154 /* action_edit.c */ 00155 /* snap - current frame to selected keys */ 00156 // TODO: maybe since this is called jump, we're better to have it on <something>-J? 00157 WM_keymap_add_item(keymap, "ACTION_OT_frame_jump", SKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0); 00158 00159 /* menu + single-step transform */ 00160 WM_keymap_add_item(keymap, "ACTION_OT_snap", SKEY, KM_PRESS, KM_SHIFT, 0); 00161 WM_keymap_add_item(keymap, "ACTION_OT_mirror", MKEY, KM_PRESS, KM_SHIFT, 0); 00162 00163 /* menu + set setting */ 00164 WM_keymap_add_item(keymap, "ACTION_OT_handle_type", VKEY, KM_PRESS, 0, 0); 00165 WM_keymap_add_item(keymap, "ACTION_OT_interpolation_type", TKEY, KM_PRESS, KM_SHIFT, 0); 00166 WM_keymap_add_item(keymap, "ACTION_OT_extrapolation_type", EKEY, KM_PRESS, KM_SHIFT, 0); 00167 WM_keymap_add_item(keymap, "ACTION_OT_keyframe_type", RKEY, KM_PRESS, 0, 0); 00168 00169 /* destructive */ 00170 WM_keymap_add_item(keymap, "ACTION_OT_clean", OKEY, KM_PRESS, 0, 0); 00171 WM_keymap_add_item(keymap, "ACTION_OT_sample", OKEY, KM_PRESS, KM_SHIFT, 0); 00172 00173 WM_keymap_add_item(keymap, "ACTION_OT_delete", XKEY, KM_PRESS, 0, 0); 00174 WM_keymap_add_item(keymap, "ACTION_OT_delete", DELKEY, KM_PRESS, 0, 0); 00175 00176 WM_keymap_add_item(keymap, "ACTION_OT_duplicate_move", DKEY, KM_PRESS, KM_SHIFT, 0); 00177 WM_keymap_add_item(keymap, "ACTION_OT_keyframe_insert", IKEY, KM_PRESS, 0, 0); 00178 00179 /* copy/paste */ 00180 WM_keymap_add_item(keymap, "ACTION_OT_copy", CKEY, KM_PRESS, KM_CTRL, 0); 00181 WM_keymap_add_item(keymap, "ACTION_OT_paste", VKEY, KM_PRESS, KM_CTRL, 0); 00182 00183 /* auto-set range */ 00184 WM_keymap_add_item(keymap, "ACTION_OT_previewrange_set", PKEY, KM_PRESS, KM_CTRL|KM_ALT, 0); 00185 WM_keymap_add_item(keymap, "ACTION_OT_view_all", HOMEKEY, KM_PRESS, 0, 0); 00186 WM_keymap_add_item(keymap, "ACTION_OT_view_selected", PADPERIOD, KM_PRESS, 0, 0); 00187 00188 /* animation module */ 00189 /* channels list 00190 * NOTE: these operators were originally for the channels list, but are added here too for convenience... 00191 */ 00192 WM_keymap_add_item(keymap, "ANIM_OT_channels_editable_toggle", TABKEY, KM_PRESS, 0, 0); 00193 00194 /* transform system */ 00195 transform_keymap_for_space(keyconf, keymap, SPACE_ACTION); 00196 } 00197 00198 /* --------------- */ 00199 00200 void action_keymap(wmKeyConfig *keyconf) 00201 { 00202 wmKeyMap *keymap; 00203 00204 /* channels */ 00205 /* Channels are not directly handled by the Action Editor module, but are inherited from the Animation module. 00206 * All the relevant operations, keymaps, drawing, etc. can therefore all be found in that module instead, as these 00207 * are all used for the Graph-Editor too. 00208 */ 00209 00210 /* keyframes */ 00211 keymap= WM_keymap_find(keyconf, "Dopesheet", SPACE_ACTION, 0); 00212 action_keymap_keyframes(keyconf, keymap); 00213 } 00214