1 //=========================================================
2 //  MusE
3 //  Linux Music Editor
4 //  $Id: ./muse/shortcuts.h $
5 //
6 //  Copyright (C) 1999-2011 by Werner Schweer and others
7 //
8 // Author: Mathias Lundgren <lunar_shuttle@users.sourceforge.net>, (C) 2003
9 //
10 // Copyright: Mathias Lundgren (lunar_shuttle@users.sourceforge.net) (C) 2003
11 //
12 //
13 //  This program is free software; you can redistribute it and/or
14 //  modify it under the terms of the GNU General Public License
15 //  as published by the Free Software Foundation; version 2 of
16 //  the License, or (at your option) any later version.
17 //
18 //  This program is distributed in the hope that it will be useful,
19 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
20 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21 //  GNU General Public License for more details.
22 //
23 //  You should have received a copy of the GNU General Public License
24 //  along with this program; if not, write to the Free Software
25 //  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
26 //
27 //=========================================================
28 //
29 // C++ Interface: shortcuts
30 //
31 // Description:
32 // Datastructures and declaration of shortcuts used in the application
33 //
34 
35 #ifndef __SHORTCUTS_H__
36 #define __SHORTCUTS_H__
37 
38 #include <list>
39 #include "xml.h"
40 
41 //
42 // Shortcut categories
43 //
44 #define PROLL_SHRT       1  // Pianoroll shortcut
45 #define DEDIT_SHRT       2  // Drumedit shortcut
46 #define LEDIT_SHRT       4  // Listedit shortcut
47 #define SCORE_SHRT       8  // Score shortcut
48 #define ARRANG_SHRT     16  // Arranger shortcut
49 #define TRANSP_SHRT     32  // Transport shortcut
50 #define WAVE_SHRT       64  // Waveedit shortcut
51 #define GLOBAL_SHRT    128  // Global shortcuts
52 #define LMEDIT_SHRT    256  // List masteredit
53 #define MEDIT_SHRT     512  // Master editor
54 #define MIXER_SHRT    1024  // Mixer
55 #define ALL_SHRT      2047  // All shortcuts
56 #define INVIS_SHRT    2048  // Shortcuts not shown in the config-dialog. Hard-coded. To avoid conflicts
57 
58 #define SHRT_NUM_OF_CATEGORIES   10 //Number of shortcut categories
59 
60 namespace MusEGui {
61 
62 struct shortcut
63 {
64     int key;
65     const char* descr;
66     const char* xml; //xml-tag for config-file
67     int type;
shortcutshortcut68     shortcut() : key(0),  descr(nullptr), xml(nullptr), type(0) { }
69 };
70 
71 struct shortcut_cg
72 {
73     int         id_flag;
74     const char* name;
75 };
76 
77 QString shrtToStr(long int shrt);
78 
79 typedef struct shortcut ShortCut ;
80 
81 enum {
82     //Transport/Positioning
83     SHRT_PLAY_SONG, //Enter
84     SHRT_PLAY_TOGGLE, //Space
85     SHRT_REC_RESTART, //Ctrl+Space
86     SHRT_REC_RESTART_MULTI, //Shift+Space
87     SHRT_STOP, //Insert
88     SHRT_GOTO_START, // W
89     SHRT_GOTO_END,   // Ctrl+W
90 
91     SHRT_GOTO_LEFT,  //End-keypad
92     SHRT_GOTO_RIGHT, //Cursordown-keypad
93     SHRT_POS_INC, // Plus
94     SHRT_POS_DEC, // Minus
95     SHRT_TOGGLE_LOOP, // Slash
96     SHRT_TOGGLE_METRO, // C
97     SHRT_START_REC, // *(keypad)
98     SHRT_REC_ARM_TRACK, // Shift+A
99     SHRT_REC_CLEAR, // backspace
100     SHRT_FULLSCREEN,
101     SHRT_TABBED_WIN,
102     SHRT_TOGGLE_DOCKS,
103     SHRT_TOGGLE_REWINDONSTOP,
104     SHRT_ARRANGER,
105 
106     //Main + Drumeditor
107     SHRT_NEW, //Ctrl+N
108     SHRT_NEW_FROM_TEMPLATE, //Ctrl+Shift+N
109     SHRT_OPEN, //Ctrl+O
110     SHRT_SAVE, //Ctrl+S
111 
112     //Used throughout the app:
113     SHRT_UNDO,  //Ctrl+Z
114     SHRT_REDO,  //Ctrl+Y
115     SHRT_COPY,  //Ctrl+C
116     SHRT_COPY_RANGE, //Ctrl+Shift+C
117     SHRT_CUT,   //Ctrl+X
118     SHRT_PASTE, //Ctrl+V
119     SHRT_PASTE_TO_CUR_PART, //CTRL+Key_B
120     SHRT_PASTE_CLONE, //CTRL+Shift+V
121     SHRT_PASTE_TO_TRACK, //CTRL+Key_B
122     SHRT_PASTE_CLONE_TO_TRACK, //CTRL+SHIFT+Key_B
123     SHRT_PASTE_DIALOG, //Ctrl+G
124     SHRT_DELETE,//Delete
125 
126 
127     //Main:
128     SHRT_SAVE_AS, //Default: undefined
129     SHRT_SAVE_AS_NEW_PROJECT,
130     SHRT_SAVE_REVISION,
131     SHRT_SAVE_AS_TEMPLATE,
132     SHRT_OPEN_RECENT, //Ctrl+1
133     SHRT_LOAD_TEMPLATE, //Default: undefined
134     SHRT_CONFIG_PRINTER, //Ctrl+P
135     SHRT_IMPORT_MIDI, //Default: undefined
136     SHRT_EXPORT_MIDI, //Default: undefined
137     SHRT_IMPORT_PART, //!< Import midi part to current track & location, Default: undefined
138     SHRT_IMPORT_AUDIO, //Default: undefined
139     SHRT_QUIT, //Default: Ctrl+Q
140 
141     SHRT_DESEL_PARTS, //Ctrl+B
142     SHRT_RENAME_PART, // Default: undefined
143     SHRT_SELECT_PRTSTRACK, //Default: undefined
144     SHRT_OPEN_PIANO, //Ctrl+E
145     SHRT_OPEN_SCORE, //Ctrl+R
146     SHRT_OPEN_DRUMS, //Ctrl+D
147     SHRT_OPEN_LIST, //Ctrl+L
148     SHRT_OPEN_WAVE, //Ctrl+W
149     SHRT_OPEN_GRAPHIC_MASTER, //Ctrl+M
150     SHRT_OPEN_LIST_MASTER, //Ctrl+Shift+M
151     SHRT_OPEN_MIDI_TRANSFORM, //Ctrl+T
152     SHRT_OPEN_PLUGIN_GUI,
153 
154     SHRT_OPEN_PIANO_NEW, //Ctrl+Alt+E
155     SHRT_OPEN_DRUMS_NEW, //Ctrl+Alt+D
156     SHRT_OPEN_LIST_NEW, //Ctrl+Alt+L
157     SHRT_OPEN_WAVE_NEW, //Ctrl+Alt+W
158 
159     SHRT_GLOBAL_CUT, //Default: undefined
160     SHRT_GLOBAL_INSERT, //Default: undefined
161     SHRT_GLOBAL_SPLIT, //Default: undefined
162     SHRT_CUT_EVENTS, //Default: undefined
163 
164     SHRT_OPEN_TRANSPORT, //F11
165     SHRT_OPEN_BIGTIME, //F12
166     SHRT_OPEN_MIXER, //Ctrl+*
167     SHRT_OPEN_MIXER2, //Ctrl+*
168     SHRT_OPEN_MARKER, // F9
169     SHRT_HIDE_MIXER_STRIP, // F3
170     SHRT_OPEN_CLIPS, //Default: undefined
171 
172     SHRT_FOLLOW_JUMP, //Default: undefined
173     SHRT_FOLLOW_NO, //Default: undefined
174     SHRT_FOLLOW_CONTINUOUS, //Default: undefined
175 
176     SHRT_GLOBAL_CONFIG, //Default: undefined
177     SHRT_CONFIG_SHORTCUTS, //Default: Ctrl+K
178     SHRT_CONFIG_METRONOME, //Default: undefined
179     SHRT_CONFIG_MIDISYNC, //Default: undefined
180     SHRT_MIDI_FILE_CONFIG, //Default: undefined
181     SHRT_APPEARANCE_SETTINGS, //Default: undefined
182     SHRT_CONFIG_MIDI_PORTS, //Default: undefined
183     SHRT_CONFIG_AUDIO_PORTS, //Default: undefined
184     //SHRT_SAVE_GLOBAL_CONFIG, //Default: undefined
185 
186     SHRT_MIDI_EDIT_INSTRUMENTS, //Default: undefined
187     SHRT_MIDI_INPUT_TRANSFORM, //Default: undefined
188     SHRT_MIDI_INPUT_FILTER, //Default: undefined
189     SHRT_MIDI_INPUT_TRANSPOSE, //Default: undefined
190     SHRT_MIDI_REMOTE_CONTROL, //Default: undefined
191     SHRT_RANDOM_RHYTHM_GENERATOR, //Default: undefined
192     SHRT_MIDI_RESET, //Default: undefined
193     SHRT_MIDI_INIT, //Default: undefined
194     SHRT_MIDI_LOCAL_OFF, //Default: undefined
195 
196     SHRT_AUDIO_BOUNCE_TO_TRACK, //Default: undefined
197     SHRT_AUDIO_BOUNCE_TO_FILE, //Default: undefined
198     SHRT_AUDIO_RESTART, //Default: undefined
199 
200     // REMOVE Tim. automation.
201     // Deprecated. MusEGlobal::automation is now fixed TRUE
202     //  for now until we decide what to do with it.
203     // Must keep this enum for proper ordering.
204     SHRT_MIXER_AUTOMATION, //Default: undefined
205 
206     SHRT_MIXER_SNAPSHOT, //Default: undefined
207     SHRT_MIXER_AUTOMATION_CLEAR, //Default: undefined
208 
209     SHRT_ADD_MIDI_TRACK, //Default: Ctrl+J
210     SHRT_ADD_DRUM_TRACK, //Default: Ctrl+k
211 //    SHRT_ADD_NEW_STYLE_DRUM_TRACK, //Default: undefined
212     SHRT_ADD_SYNTH_TRACK,
213     SHRT_ADD_WAVE_TRACK, //Default: undefined
214     SHRT_ADD_AUDIO_OUTPUT, //Default: undefined
215     SHRT_ADD_AUDIO_GROUP, //Default: undefined
216     SHRT_ADD_AUDIO_INPUT, //Default: undefined
217     SHRT_ADD_AUDIO_AUX, //Default: undefined
218 
219     SHRT_INSERT_MIDI_TRACK, //Default: undefined
220     SHRT_INSERT_DRUM_TRACK, //Default: undefined
221 //    SHRT_INSERT_NEW_STYLE_DRUM_TRACK, //Default: undefined
222     SHRT_INSERT_SYNTH_TRACK,
223     SHRT_INSERT_WAVE_TRACK, //Default: undefined
224     SHRT_INSERT_AUDIO_OUTPUT, //Default: undefined
225     SHRT_INSERT_AUDIO_GROUP, //Default: undefined
226     SHRT_INSERT_AUDIO_INPUT, //Default: undefined
227     SHRT_INSERT_AUDIO_AUX, //Default: undefined
228 
229     SHRT_RESET_MIDI, //Ctrl+Alt+Z
230 
231     SHRT_OPEN_HELP, //F1
232     SHRT_START_WHATSTHIS, //Shift-F1
233 
234     //Arranger, parts:
235     SHRT_EDIT_PART, //Enter
236     SHRT_SEL_ABOVE, //Up
237     SHRT_SEL_ABOVE_ADD, //move up and add to selection
238     SHRT_SEL_BELOW, //Down
239     SHRT_SEL_BELOW_ADD, //move down and add to selection
240 
241     SHRT_INSERTMEAS, //Ctrl+Shift+M - insert measures
242     SHRT_DUPLICATE_TRACK, // Ctrl+Shift+D
243     SHRT_MOVEUP_TRACK,
244     SHRT_MOVEDOWN_TRACK,
245     SHRT_MOVETOP_TRACK,
246     SHRT_MOVEBOTTOM_TRACK,
247 
248     //Arranger tracks
249     SHRT_SEL_TRACK_BELOW,
250     SHRT_SEL_TRACK_ABOVE,
251     SHRT_EDIT_TRACK_NAME,
252     SHRT_MUTE_CURRENT_TRACKS,
253     SHRT_SOLO_CURRENT_TRACKS,
254 
255     //To be in arranger, pianoroll & drumeditor. p4.0.10 now globally handled, too.
256     SHRT_SELECT_ALL, //Ctrl+A
257     SHRT_SELECT_NONE, //Ctrl+Shift+A
258     SHRT_SELECT_INVERT, //Ctrl+I
259     SHRT_SELECT_ILOOP, //Default: Undefined
260     SHRT_SELECT_OLOOP, //Default: Undefined
261     SHRT_SELECT_PREV_PART, // Ctrl+-
262     SHRT_SELECT_NEXT_PART, // Ctrl++
263     SHRT_SEL_LEFT, //left
264     SHRT_SEL_LEFT_ADD, //move left and add to selection
265     SHRT_SEL_RIGHT, //Right
266     SHRT_SEL_RIGHT_ADD, //move right and add to selection
267     SHRT_INC_PITCH,
268     SHRT_DEC_PITCH,
269     SHRT_INC_POS,
270     SHRT_DEC_POS,
271 
272     SHRT_STEP_RECORD,
273     SHRT_MIDI_INPUT,
274     SHRT_PLAY_EVENTS,
275     SHRT_INC_VELOCITY,
276     SHRT_DEC_VELOCITY,
277 
278     SHRT_POS_INC_NOSNAP,
279     SHRT_POS_DEC_NOSNAP,
280 
281     /*
282       SHRT_POS_INC_BAR,
283       SHRT_POS_DEC_BAR,
284       SHRT_POS_INC_BAR_NOSNAP,
285       SHRT_POS_DEC_BAR_NOSNAP,
286 
287       SHRT_POS_INC_BEAT,
288       SHRT_POS_DEC_BEAT,
289       SHRT_POS_INC_BEAT_NOSNAP,
290       SHRT_POS_DEC_BEAT_NOSNAP,
291 
292       SHRT_POS_INC_TICK,
293       SHRT_POS_DEC_TICK,
294       SHRT_POS_INC_TICK_NOSNAP,
295       SHRT_POS_DEC_TICK_NOSNAP,
296 
297       SHRT_POS_INC_MINUTE,
298       SHRT_POS_DEC_MINUTE,
299       SHRT_POS_INC_MINUTE_NOSNAP,
300       SHRT_POS_DEC_MINUTE_NOSNAP,
301 
302       SHRT_POS_INC_SECOND,
303       SHRT_POS_DEC_SECOND,
304       SHRT_POS_INC_SECOND_NOSNAP,
305       SHRT_POS_DEC_SECOND_NOSNAP,
306 
307       SHRT_POS_INC_FRAME,
308       SHRT_POS_DEC_FRAME,
309       */
310 
311     SHRT_LOCATORS_TO_SELECTION, //Alt+P, currently in arranger & pianoroll
312     SHRT_INSERT_AT_LOCATION, //Shift+CrsrRight
313     SHRT_INCREASE_LEN,
314     SHRT_DECREASE_LEN,
315 
316     //SHRT_TOOL_1,//Shift+1 Pointer
317     //SHRT_TOOL_2,//Shift+2 Pen
318     //SHRT_TOOL_3,//Shift+3 Rubber
319     //SHRT_TOOL_4,//Shift+4
320     //SHRT_TOOL_5,//Shift+5
321     //SHRT_TOOL_6,//Shift+6
322     SHRT_TRANSPOSE, //Default: undefined
323 
324     //Shortcuts to be in pianoroll & drumeditor
325     SHRT_ZOOM_IN,  // PgUp
326     SHRT_ZOOM_OUT, // PgDown
327     SHRT_GOTO_CPOS, // c
328     SHRT_SCROLL_LEFT, // h
329     SHRT_SCROLL_RIGHT, // l
330     SHRT_FIXED_LEN, //Alt+L, currently only drumeditor
331     SHRT_QUANTIZE, //q
332     SHRT_MODIFY_GATE_TIME, //Default: undefined
333     SHRT_MODIFY_VELOCITY,
334     SHRT_CRESCENDO,
335     SHRT_DELETE_OVERLAPS,
336 
337     SHRT_THIN_OUT,
338     SHRT_ERASE_EVENT,
339     SHRT_NOTE_SHIFT,
340     SHRT_MOVE_CLOCK,
341     SHRT_COPY_MEASURE,
342     SHRT_ERASE_MEASURE,
343     SHRT_DELETE_MEASURE,
344     SHRT_CREATE_MEASURE,
345     SHRT_SET_QUANT_BAR,
346     SHRT_SET_QUANT_OFF,
347     SHRT_SET_QUANT_1,
348     SHRT_SET_QUANT_2,
349     SHRT_SET_QUANT_3,
350     SHRT_SET_QUANT_4,
351     SHRT_SET_QUANT_5,
352     SHRT_SET_QUANT_6,
353     SHRT_SET_QUANT_7,
354     SHRT_TOGGLE_TRIOL,
355     SHRT_TOGGLE_PUNCT,
356     SHRT_TOGGLE_PUNCT2,
357 
358     SHRT_EVENT_COLOR,
359 
360     SHRT_MOVE_PLAY_TO_NOTE,
361 
362     SHRT_USE_LAST_EDITED_EVENT,
363 
364     // Shortcuts for tools
365     // global
366     SHRT_TOOL_POINTER,  //
367     SHRT_TOOL_PENCIL,
368     SHRT_TOOL_RUBBER,
369     SHRT_TOOL_PAN,
370     SHRT_TOOL_ZOOM,
371 
372     // pianoroll and drum editor
373     SHRT_TOOL_LINEDRAW,
374 
375     // drum editor
376     SHRT_TOOL_CURSOR,
377     SHRT_ADDNOTE_1,
378     SHRT_ADDNOTE_2,
379     SHRT_ADDNOTE_3,
380     SHRT_ADDNOTE_4,
381     SHRT_CURSOR_STEP_UP,
382     SHRT_CURSOR_STEP_DOWN,
383     SHRT_INSTRUMENT_STEP_DOWN,
384     SHRT_INSTRUMENT_STEP_UP,
385 
386     // wave editor
387     SHRT_TOOL_RANGE,
388 
389     // arranger
390     SHRT_TOOL_SCISSORS,
391     SHRT_TOOL_GLUE,
392     SHRT_TOOL_MUTE,
393 
394 
395     //Listeditor:
396     SHRT_LE_INS_NOTES, // N
397     SHRT_LE_INS_SYSEX, // S
398     SHRT_LE_INS_CTRL, // C
399     SHRT_LE_INS_META, // M
400     // unused
401     //      SHRT_LE_INS_CHAN_AFTERTOUCH,//Ctrl+A
402     //      SHRT_LE_INS_POLY_AFTERTOUCH,//Ctrl+P
403 
404     //List master editor:
405     SHRT_LM_INS_TEMPO, // Ctrl+T
406     SHRT_LM_INS_SIG,   // Ctrl+R
407     SHRT_LM_EDIT_BEAT, // Ctrl+Shift+E
408     SHRT_LM_EDIT_VALUE,// Ctrl+E
409     SHRT_LM_INS_KEY,   // Ctrl+K
410 
411     // Marker view
412     SHRT_NEXT_MARKER,
413     SHRT_PREV_MARKER,
414 
415     // Arranger
416     SHRT_PART_NORMALIZE, // Alt+N
417 
418     SHRT_TOOL_STRETCH,
419     SHRT_TOOL_SAMPLERATE,
420 
421     // Mixer
422     SHRT_MIXER_SELECT_STRIP_LEFT,
423     SHRT_MIXER_SELECT_STRIP_RIGHT,
424     // TODO Feature marked as todo in AudioMixerApp::selectNextStrip().
425     //SHRT_MIXER_MULTI_SELECT_STRIP_LEFT,
426     //SHRT_MIXER_MULTI_SELECT_STRIP_RIGHT,
427     SHRT_MIXER_STRIP_VOL_DOWN,
428     SHRT_MIXER_STRIP_VOL_UP,
429     SHRT_MIXER_STRIP_PAN_LEFT,
430     SHRT_MIXER_STRIP_PAN_RIGHT,
431     SHRT_MIXER_STRIP_VOL_DOWN_PAGE,
432     SHRT_MIXER_STRIP_VOL_UP_PAGE,
433     SHRT_MIXER_STRIP_PAN_LEFT_PAGE,
434     SHRT_MIXER_STRIP_PAN_RIGHT_PAGE,
435 
436     //Last item:
437     SHRT_NUM_OF_ELEMENTS        // must be last
438 };
439 
440 extern ShortCut shortcuts[SHRT_NUM_OF_ELEMENTS]; //size of last entry
441 extern void initShortCuts();
442 extern void writeShortCuts(int level, MusECore::Xml& xml);
443 extern void readShortCuts (MusECore::Xml& xml);
444 extern const shortcut_cg shortcut_category[SHRT_NUM_OF_CATEGORIES];
445 
446 } // namespace MusEGui
447 
448 #endif
449