Cleanup: style, use braces for editors
[blender.git] / source / blender / editors / space_nla / nla_ops.c
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2009 Blender Foundation, Joshua Leung
17  * All rights reserved.
18  */
19
20 /** \file
21  * \ingroup spnla
22  */
23
24 #include <string.h>
25 #include <stdio.h>
26
27 #include "DNA_scene_types.h"
28
29 #include "BKE_context.h"
30 #include "BKE_screen.h"
31
32 #include "ED_anim_api.h"
33 #include "ED_markers.h"
34 #include "ED_screen.h"
35 #include "ED_select_utils.h"
36 #include "ED_transform.h"
37
38 #include "WM_api.h"
39 #include "WM_types.h"
40
41 #include "RNA_access.h"
42
43 #include "nla_intern.h" /* own include */
44
45 /* ************************** poll callbacks for operators **********************************/
46
47 /* tweakmode is NOT enabled */
48 bool nlaop_poll_tweakmode_off(bContext *C)
49 {
50   Scene *scene;
51
52   /* for now, we check 2 things:
53    * 1) active editor must be NLA
54    * 2) tweakmode is currently set as a 'per-scene' flag
55    *    so that it will affect entire NLA data-sets,
56    *    but not all AnimData blocks will be in tweakmode for
57    *    various reasons
58    */
59   if (ED_operator_nla_active(C) == 0) {
60     return 0;
61   }
62
63   scene = CTX_data_scene(C);
64   if ((scene == NULL) || (scene->flag & SCE_NLA_EDIT_ON)) {
65     return 0;
66   }
67
68   return 1;
69 }
70
71 /* tweakmode IS enabled */
72 bool nlaop_poll_tweakmode_on(bContext *C)
73 {
74   Scene *scene;
75
76   /* for now, we check 2 things:
77    * 1) active editor must be NLA
78    * 2) tweakmode is currently set as a 'per-scene' flag
79    *    so that it will affect entire NLA data-sets,
80    *    but not all AnimData blocks will be in tweakmode for
81    *    various reasons
82    */
83   if (ED_operator_nla_active(C) == 0) {
84     return 0;
85   }
86
87   scene = CTX_data_scene(C);
88   if ((scene == NULL) || !(scene->flag & SCE_NLA_EDIT_ON)) {
89     return 0;
90   }
91
92   return 1;
93 }
94
95 /* is tweakmode enabled - for use in NLA operator code */
96 bool nlaedit_is_tweakmode_on(bAnimContext *ac)
97 {
98   if (ac && ac->scene) {
99     return (ac->scene->flag & SCE_NLA_EDIT_ON) != 0;
100   }
101   return 0;
102 }
103
104 /* ************************** registration - operator types **********************************/
105
106 void nla_operatortypes(void)
107 {
108   /* channels */
109   WM_operatortype_append(NLA_OT_channels_click);
110
111   WM_operatortype_append(NLA_OT_action_pushdown);
112   WM_operatortype_append(NLA_OT_action_unlink);
113
114   WM_operatortype_append(NLA_OT_tracks_add);
115   WM_operatortype_append(NLA_OT_tracks_delete);
116
117   WM_operatortype_append(NLA_OT_selected_objects_add);
118
119   /* select */
120   WM_operatortype_append(NLA_OT_click_select);
121   WM_operatortype_append(NLA_OT_select_box);
122   WM_operatortype_append(NLA_OT_select_all);
123   WM_operatortype_append(NLA_OT_select_leftright);
124
125   /* view */
126   WM_operatortype_append(NLA_OT_view_all);
127   WM_operatortype_append(NLA_OT_view_selected);
128   WM_operatortype_append(NLA_OT_view_frame);
129
130   WM_operatortype_append(NLA_OT_previewrange_set);
131
132   /* edit */
133   WM_operatortype_append(NLA_OT_tweakmode_enter);
134   WM_operatortype_append(NLA_OT_tweakmode_exit);
135
136   WM_operatortype_append(NLA_OT_actionclip_add);
137   WM_operatortype_append(NLA_OT_transition_add);
138   WM_operatortype_append(NLA_OT_soundclip_add);
139
140   WM_operatortype_append(NLA_OT_meta_add);
141   WM_operatortype_append(NLA_OT_meta_remove);
142
143   WM_operatortype_append(NLA_OT_duplicate);
144   WM_operatortype_append(NLA_OT_delete);
145   WM_operatortype_append(NLA_OT_split);
146
147   WM_operatortype_append(NLA_OT_mute_toggle);
148
149   WM_operatortype_append(NLA_OT_swap);
150   WM_operatortype_append(NLA_OT_move_up);
151   WM_operatortype_append(NLA_OT_move_down);
152
153   WM_operatortype_append(NLA_OT_action_sync_length);
154
155   WM_operatortype_append(NLA_OT_make_single_user);
156
157   WM_operatortype_append(NLA_OT_apply_scale);
158   WM_operatortype_append(NLA_OT_clear_scale);
159
160   WM_operatortype_append(NLA_OT_snap);
161
162   WM_operatortype_append(NLA_OT_fmodifier_add);
163   WM_operatortype_append(NLA_OT_fmodifier_copy);
164   WM_operatortype_append(NLA_OT_fmodifier_paste);
165 }
166
167 /* ************************** registration - keymaps **********************************/
168
169 void nla_keymap(wmKeyConfig *keyconf)
170 {
171   /* keymap for all regions ------------------------------------------- */
172   WM_keymap_ensure(keyconf, "NLA Generic", SPACE_NLA, 0);
173
174   /* channels ---------------------------------------------------------- */
175   /* Channels are not directly handled by the NLA Editor module, but are inherited from the
176    * animation module. Most of the relevant operations, keymaps, drawing, etc. can therefore all
177    * be found in that module instead, as there are many similarities with the other
178    * animation editors.
179    *
180    * However, those operations which involve clicking on channels and/or
181    * the placement of them in the view are implemented here instead
182    */
183   WM_keymap_ensure(keyconf, "NLA Channels", SPACE_NLA, 0);
184
185   /* data ------------------------------------------------------------- */
186   WM_keymap_ensure(keyconf, "NLA Editor", SPACE_NLA, 0);
187 }