Blender  V2.59
node_ops.c
Go to the documentation of this file.
00001 /*
00002  * $Id: node_ops.c 38459 2011-07-17 18:17:35Z lukastoenne $
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, Nathan Letwory
00025  *
00026  * ***** END GPL LICENSE BLOCK *****
00027  */
00028 
00034 #include "DNA_node_types.h"
00035 #include "DNA_scene_types.h"
00036 
00037 #include "BKE_context.h"
00038 
00039 #include "ED_node.h"
00040 #include "ED_screen.h"
00041 #include "ED_transform.h"
00042 
00043 #include "RNA_access.h"
00044 
00045 #include "WM_api.h"
00046 #include "WM_types.h"
00047 
00048 #include "node_intern.h"
00049 
00050 void node_operatortypes(void)
00051 {
00052         WM_operatortype_append(NODE_OT_properties);
00053         
00054         WM_operatortype_append(NODE_OT_select);
00055         WM_operatortype_append(NODE_OT_select_all);
00056         WM_operatortype_append(NODE_OT_select_linked_to);
00057         WM_operatortype_append(NODE_OT_select_linked_from);
00058         WM_operatortype_append(NODE_OT_select_border);
00059         WM_operatortype_append(NODE_OT_select_same_type);
00060         WM_operatortype_append(NODE_OT_select_same_type_next);
00061         WM_operatortype_append(NODE_OT_select_same_type_prev);
00062 
00063         WM_operatortype_append(NODE_OT_view_all);
00064         WM_operatortype_append(NODE_OT_visibility_toggle);
00065         WM_operatortype_append(NODE_OT_mute_toggle);
00066         WM_operatortype_append(NODE_OT_hide_toggle);
00067         WM_operatortype_append(NODE_OT_preview_toggle);
00068         WM_operatortype_append(NODE_OT_hide_socket_toggle);
00069         WM_operatortype_append(NODE_OT_show_cyclic_dependencies);
00070         
00071         WM_operatortype_append(NODE_OT_duplicate);
00072         WM_operatortype_append(NODE_OT_delete);
00073         WM_operatortype_append(NODE_OT_delete_reconnect);
00074         WM_operatortype_append(NODE_OT_resize);
00075         
00076         WM_operatortype_append(NODE_OT_link);
00077         WM_operatortype_append(NODE_OT_link_make);
00078         WM_operatortype_append(NODE_OT_links_cut);
00079 
00080         WM_operatortype_append(NODE_OT_group_make);
00081         WM_operatortype_append(NODE_OT_group_ungroup);
00082         WM_operatortype_append(NODE_OT_group_edit);
00083         WM_operatortype_append(NODE_OT_group_socket_add);
00084         WM_operatortype_append(NODE_OT_group_socket_remove);
00085         WM_operatortype_append(NODE_OT_group_socket_move_up);
00086         WM_operatortype_append(NODE_OT_group_socket_move_down);
00087         
00088         WM_operatortype_append(NODE_OT_link_viewer);
00089         
00090         WM_operatortype_append(NODE_OT_read_renderlayers);
00091         WM_operatortype_append(NODE_OT_read_fullsamplelayers);
00092         WM_operatortype_append(NODE_OT_render_changed);
00093         
00094         WM_operatortype_append(NODE_OT_backimage_move);
00095         WM_operatortype_append(NODE_OT_backimage_zoom);
00096         WM_operatortype_append(NODE_OT_backimage_sample);
00097         
00098         WM_operatortype_append(NODE_OT_add_file);
00099 }
00100 
00101 void ED_operatormacros_node(void)
00102 {
00103         wmOperatorType *ot;
00104         wmOperatorTypeMacro *mot;
00105         
00106         ot= WM_operatortype_append_macro("NODE_OT_duplicate_move", "Duplicate", OPTYPE_UNDO|OPTYPE_REGISTER);
00107         WM_operatortype_macro_define(ot, "NODE_OT_duplicate");
00108         WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate");
00109 
00110         /* modified operator call for duplicating with input links */
00111         ot= WM_operatortype_append_macro("NODE_OT_duplicate_move_keep_inputs", "Duplicate", OPTYPE_UNDO|OPTYPE_REGISTER);
00112         mot = WM_operatortype_macro_define(ot, "NODE_OT_duplicate");
00113                 RNA_boolean_set(mot->ptr, "keep_inputs", 1);
00114         WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate");
00115 
00116         ot= WM_operatortype_append_macro("NODE_OT_select_link_viewer", "Link Viewer", OPTYPE_UNDO);
00117         WM_operatortype_macro_define(ot, "NODE_OT_select");
00118         WM_operatortype_macro_define(ot, "NODE_OT_link_viewer");
00119         }
00120 
00121 void node_keymap(struct wmKeyConfig *keyconf)
00122 {
00123         wmKeyMap *keymap;
00124         wmKeyMapItem *kmi;
00125         
00126         /* Entire Editor only ----------------- */
00127         keymap= WM_keymap_find(keyconf, "Node Generic", SPACE_NODE, 0);
00128         
00129         WM_keymap_add_item(keymap, "NODE_OT_properties", NKEY, KM_PRESS, 0, 0);
00130         
00131         /* Main Area only ----------------- */
00132         keymap= WM_keymap_find(keyconf, "Node Editor", SPACE_NODE, 0);
00133         
00134         /* mouse select in nodes used to be both keys, but perhaps this should be reduced? 
00135          * NOTE: mouse-clicks on left-mouse will fall through to allow transform-tweak, but also link/resize
00136          */
00137         WM_keymap_add_item(keymap, "NODE_OT_select", ACTIONMOUSE, KM_PRESS, 0, 0);
00138         WM_keymap_add_item(keymap, "NODE_OT_select", SELECTMOUSE, KM_PRESS, 0, 0);
00139         kmi= WM_keymap_add_item(keymap, "NODE_OT_select", ACTIONMOUSE, KM_PRESS, KM_SHIFT, 0);
00140                 RNA_boolean_set(kmi->ptr, "extend", 1);
00141         kmi= WM_keymap_add_item(keymap, "NODE_OT_select", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0);
00142                 RNA_boolean_set(kmi->ptr, "extend", 1);
00143         RNA_boolean_set(WM_keymap_add_item(keymap, "NODE_OT_select_border", EVT_TWEAK_S, KM_ANY, 0, 0)->ptr, "tweak", 1);
00144         
00145         /* each of these falls through if not handled... */
00146         WM_keymap_add_item(keymap, "NODE_OT_link", LEFTMOUSE, KM_PRESS, 0, 0);
00147         WM_keymap_add_item(keymap, "NODE_OT_resize", LEFTMOUSE, KM_PRESS, 0, 0);
00148         WM_keymap_add_item(keymap, "NODE_OT_visibility_toggle", LEFTMOUSE, KM_PRESS, 0, 0);
00149         
00150         WM_keymap_add_item(keymap, "NODE_OT_links_cut", LEFTMOUSE, KM_PRESS, KM_CTRL, 0);
00151         WM_keymap_add_item(keymap, "NODE_OT_select_link_viewer", LEFTMOUSE, KM_PRESS, KM_SHIFT|KM_CTRL, 0);
00152         
00153         WM_keymap_add_item(keymap, "NODE_OT_backimage_move", MIDDLEMOUSE, KM_PRESS, KM_ALT, 0);
00154         kmi= WM_keymap_add_item(keymap, "NODE_OT_backimage_zoom", VKEY, KM_PRESS, 0, 0);
00155                 RNA_float_set(kmi->ptr, "factor", 0.83333f);
00156         kmi= WM_keymap_add_item(keymap, "NODE_OT_backimage_zoom", VKEY, KM_PRESS, KM_ALT, 0);
00157                 RNA_float_set(kmi->ptr, "factor", 1.2f);
00158         WM_keymap_add_item(keymap, "NODE_OT_backimage_sample", ACTIONMOUSE, KM_PRESS, KM_ALT, 0);
00159         
00160         WM_keymap_add_item(keymap, "NODE_OT_link_make", FKEY, KM_PRESS, 0, 0);
00161         RNA_boolean_set(WM_keymap_add_item(keymap, "NODE_OT_link_make", FKEY, KM_PRESS, KM_CTRL, 0)->ptr, "replace", 1);
00162         
00163         WM_keymap_add_menu(keymap, "NODE_MT_add", AKEY, KM_PRESS, KM_SHIFT, 0);
00164         WM_keymap_add_item(keymap, "NODE_OT_duplicate_move", DKEY, KM_PRESS, KM_SHIFT, 0);
00165         /* modified operator call for duplicating with input links */
00166         WM_keymap_add_item(keymap, "NODE_OT_duplicate_move_keep_inputs", DKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0);
00167         
00168         WM_keymap_add_item(keymap, "NODE_OT_hide_toggle", HKEY, KM_PRESS, 0, 0);
00169         WM_keymap_add_item(keymap, "NODE_OT_mute_toggle", MKEY, KM_PRESS, 0, 0);
00170         WM_keymap_add_item(keymap, "NODE_OT_preview_toggle", HKEY, KM_PRESS, KM_SHIFT, 0);
00171         WM_keymap_add_item(keymap, "NODE_OT_hide_socket_toggle", HKEY, KM_PRESS, KM_CTRL, 0);
00172         
00173         WM_keymap_add_item(keymap, "NODE_OT_show_cyclic_dependencies", CKEY, KM_PRESS, 0, 0);
00174         
00175         WM_keymap_add_item(keymap, "NODE_OT_view_all", HOMEKEY, KM_PRESS, 0, 0);
00176         WM_keymap_add_item(keymap, "NODE_OT_select_border", BKEY, KM_PRESS, 0, 0);
00177         WM_keymap_add_item(keymap, "NODE_OT_delete", XKEY, KM_PRESS, 0, 0);
00178         WM_keymap_add_item(keymap, "NODE_OT_delete", DELKEY, KM_PRESS, 0, 0);
00179         WM_keymap_add_item(keymap, "NODE_OT_delete_reconnect", XKEY, KM_PRESS, KM_CTRL, 0);
00180 
00181         WM_keymap_add_item(keymap, "NODE_OT_select_all", AKEY, KM_PRESS, 0, 0);
00182         WM_keymap_add_item(keymap, "NODE_OT_select_linked_to", LKEY, KM_PRESS, KM_SHIFT, 0);
00183         WM_keymap_add_item(keymap, "NODE_OT_select_linked_from", LKEY, KM_PRESS, 0, 0);
00184         WM_keymap_add_item(keymap, "NODE_OT_select_same_type", GKEY, KM_PRESS, KM_SHIFT, 0);
00185         WM_keymap_add_item(keymap, "NODE_OT_select_same_type_next", RIGHTBRACKETKEY, KM_PRESS, KM_SHIFT, 0);
00186         WM_keymap_add_item(keymap, "NODE_OT_select_same_type_prev", LEFTBRACKETKEY, KM_PRESS, KM_SHIFT, 0);
00187 
00188         WM_keymap_add_item(keymap, "NODE_OT_group_make", GKEY, KM_PRESS, KM_CTRL, 0);
00189         WM_keymap_add_item(keymap, "NODE_OT_group_ungroup", GKEY, KM_PRESS, KM_ALT, 0);
00190         WM_keymap_add_item(keymap, "NODE_OT_group_edit", TABKEY, KM_PRESS, 0, 0);
00191         
00192         WM_keymap_add_item(keymap, "NODE_OT_read_renderlayers", RKEY, KM_PRESS, KM_CTRL, 0);
00193         WM_keymap_add_item(keymap, "NODE_OT_read_fullsamplelayers", RKEY, KM_PRESS, KM_SHIFT, 0);
00194         WM_keymap_add_item(keymap, "NODE_OT_render_changed", ZKEY, KM_PRESS, 0, 0);
00195         
00196         
00197         transform_keymap_for_space(keyconf, keymap, SPACE_NODE);
00198 }