1 #include "skin/legacy/tooltips.h"
2 
3 #include "moc_tooltips.cpp"
4 
Tooltips()5 Tooltips::Tooltips() {
6     addStandardTooltips();
7 }
8 
~Tooltips()9 Tooltips::~Tooltips() {
10 }
11 
tooltipForId(const QString & id) const12 QString Tooltips::tooltipForId(const QString& id) const {
13     // We always add a separator at the end.
14     QString joined = m_tooltips.value(id, QStringList()).join(tooltipSeparator());
15     if (joined.length() > 0) {
16         joined += tooltipSeparator();
17     }
18     return joined;
19 }
20 
tooltipSeparator() const21 QString Tooltips::tooltipSeparator() const {
22     return "\n";
23 }
24 
add(const QString & id)25 QList<QString>& Tooltips::add(const QString& id) {
26     return m_tooltips[id];
27 }
28 
addStandardTooltips()29 void Tooltips::addStandardTooltips() {
30     QString dropTracksHere = tr("Drop tracks from library, external file manager, or other decks/samplers here.");
31     QString dragItem = tr("Drag this item to other decks/samplers, to crates and playlist or to external file manager.");
32     QString trackProperties = tr("Opens the track properties editor");
33     QString trackMenu = tr("Opens the track context menu.");
34     QString resetToDefault = tr("Reset to default value.");
35     QString leftClick = tr("Left-click");
36     QString rightClick = tr("Right-click");
37     QString doubleClick = tr("Double-click");
38     QString scrollWheel = tr("Scroll-wheel");
39     QString shift = tr("Shift-key");
40     QString loopActive = "(" + tr("loop active") + ")";
41     QString loopInactive = "(" + tr("loop inactive") + ")";
42     QString effectsWithinUnit = tr("Effects within the chain must be enabled to hear them.");
43 
44     add("waveform_overview")
45             << tr("Waveform Overview")
46             << tr("Shows information about the track currently loaded in this deck.") << "\n"
47             << tr("Left click to jump around in the track.")
48             << tr("Right click hotcues to edit their labels and colors.")
49             << tr("Right click anywhere else to show the time at that point.")
50             << dropTracksHere;
51 
52     QString scratchMouse = tr("Use the mouse to scratch, spin-back or throw tracks.");
53     add("waveform_display")
54             << tr("Waveform Display")
55             << tr("Shows the loaded track's waveform near the playback position.")
56             << QString("%1: %2").arg(leftClick, scratchMouse)
57             << QString("%1: %2").arg(rightClick, tr("Drag with mouse to make temporary pitch adjustments."))
58             << QString("%1: %2").arg(scrollWheel, tr("Scroll to change the waveform zoom level."))
59             << dropTracksHere;
60 
61     add("waveform_zoom_up")
62             << tr("Waveform Zoom Out");
63 
64     add("waveform_zoom_down")
65             << tr("Waveform Zoom In");
66 
67     add("waveform_zoom_set_default")
68             << tr("Waveform Zoom")
69             << QString("%1").arg(resetToDefault);
70 
71     add("spinny")
72             << tr("Spinning Vinyl")
73             << tr("Rotates during playback and shows the position of a track.")
74             << scratchMouse
75             << tr("Right click to show cover art of loaded track.")
76             << dropTracksHere
77             << tr("If Vinyl control is enabled, displays time-coded vinyl signal quality (see Preferences -> Vinyl Control).");
78 
79     add("big_spinny_coverart")
80             << tr("Big Spinny/Cover Art")
81             << tr("Show a big version of the Spinny or track cover art if enabled.");
82 
83     add("pregain")
84             << tr("Gain")
85             << tr("Adjusts the pre-fader gain of the track (to avoid clipping).")
86             << QString("%1: %2").arg(rightClick, resetToDefault);
87 
88     QString clippingHelp = tr("(too loud for the hardware and is being distorted).");
89     add("channel_PeakIndicator")
90             << tr("Channel Peak Indicator")
91             << tr("Indicates when the signal on the channel is clipping,")
92             << clippingHelp;
93 
94     add("channel_PeakIndicatorL")
95             << tr("Channel L Peak Indicator")
96             << tr("Indicates when the left signal on the channel is clipping,")
97             << clippingHelp;
98 
99     add("channel_PeakIndicatorR")
100             << tr("Channel R Peak Indicator")
101             << tr("Indicates when the right signal on the channel is clipping,")
102             << clippingHelp;
103 
104     add("master_PeakIndicator")
105             << tr("Master Peak Indicator")
106             << tr("Indicates when the signal on the master output is clipping,")
107             << clippingHelp;
108 
109     add("master_PeakIndicatorL")
110             << tr("Master L Peak Indicator")
111             << tr("Indicates when the left signal on the master output is clipping,")
112             << clippingHelp;
113 
114     add("master_PeakIndicatorR")
115             << tr("Master R Peak Indicator")
116             << tr("Indicates when the right signal on the master output is clipping,")
117             << clippingHelp;
118 
119     add("channel_VuMeter")
120             << tr("Channel Volume Meter")
121             << tr("Shows the current channel volume.");
122 
123     add("channel_VuMeterL")
124             << tr("Channel L Volume Meter")
125             << tr("Shows the current channel volume for the left channel.");
126 
127     add("channel_VuMeterR")
128             << tr("Channel R Volume Meter")
129             << tr("Shows the current channel volume for the right channel.");
130 
131     add("microphone_VuMeter")
132             << tr("Microphone Volume Meter")
133             << tr("Shows the current microphone volume.");
134 
135     add("microphone_PeakIndicator")
136             << tr("Microphone Peak Indicator")
137             << tr("Indicates when the signal on the microphone is clipping,")
138             << clippingHelp;
139 
140     add("auxiliary_VuMeter")
141             << tr("Auxiliary Volume Meter")
142             << tr("Shows the current auxiliary volume.");
143 
144     add("auxiliary_PeakIndicator")
145             << tr("Auxiliary Peak Indicator")
146             << tr("Indicates when the signal on the auxiliary is clipping,")
147             << clippingHelp;
148 
149     add("sampler_VuMeter")
150             << tr("Sampler Volume Meter")
151             << tr("Shows the current sampler volume.");
152 
153     add("sampler_PeakIndicator")
154             << tr("Sampler Peak Indicator")
155             << tr("Indicates when the signal on the sampler is clipping,")
156             << clippingHelp;
157 
158     add("preview_VuMeter")
159             << tr("Preview Deck Volume Meter")
160             << tr("Shows the current Preview Deck volume.");
161 
162     add("preview_PeakIndicator")
163             << tr("Preview Deck Peak Indicator")
164             << tr("Indicates when the signal on the Preview Deck is clipping,")
165             << clippingHelp;
166 
167     add("master_VuMeterL")
168             << tr("Master Channel L Volume Meter")
169             << tr("Shows the current master volume for the left channel.");
170 
171     add("master_VuMeterR")
172             << tr("Master Channel R Volume Meter")
173             << tr("Shows the current master volume for the right channel.");
174 
175     add("channel_volume")
176             << tr("Volume Control")
177             << tr("Adjusts the volume of the selected channel.")
178             << QString("%1: %2").arg(rightClick, resetToDefault);
179 
180     // Legacy control.
181     add("master_volume")
182             << tr("Master Volume")
183             << tr("Adjusts the master output volume.")
184             << QString("%1: %2").arg(rightClick, resetToDefault);
185 
186     add("master_gain")
187             << tr("Master Gain")
188             << tr("Adjusts the master output gain.")
189             << QString("%1: %2").arg(rightClick, resetToDefault);
190 
191     add("booth_gain")
192             << tr("Booth Gain")
193             << tr("Adjusts the booth output gain.")
194             << QString("%1: %2").arg(rightClick, resetToDefault);
195 
196     add("crossfader")
197             << tr("Crossfader")
198             << tr("Determines the master output by fading between the left and right channels.")
199             << QString("%1: %2").arg(rightClick, resetToDefault)
200             << tr("Change the crossfader curve in Preferences -> Crossfader");
201 
202     add("balance")
203             << tr("Balance")
204             << tr("Adjusts the left/right channel balance on the master output.")
205             << QString("%1: %2").arg(rightClick, resetToDefault);
206 
207     // Legacy control.
208     add("headphone_volume")
209             << tr("Headphone Volume")
210             << tr("Adjusts the headphone output volume.")
211             << QString("%1: %2").arg(rightClick, resetToDefault);
212 
213     add("headphone_gain")
214             << tr("Headphone Gain")
215             << tr("Adjusts the headphone output gain.")
216             << QString("%1: %2").arg(rightClick, resetToDefault);
217 
218     add("headMix")
219             << tr("Headphone Mix")
220             << tr("Crossfades the headphone output between the master mix and cueing (PFL or Pre-Fader Listening) signal.")
221             << QString("%1: %2").arg(rightClick, resetToDefault);
222 
223     add("headSplit")
224             << tr("Headphone Split Cue")
225             << tr("If activated, the master signal plays in the right channel, while the cueing signal "
226                   "plays in the left channel.")
227             << tr("Adjust the Headphone Mix so in the left channel is not the pure cueing signal.");
228 
229     add("orientation")
230             << tr("Crossfader Orientation")
231             << tr("Set the channel's crossfader orientation.")
232             << tr("Either to the left side of crossfader, to the right side or to the center (unaffected by crossfader)");
233 
234     add("show_microphone")
235             << tr("Microphone")
236             << tr("Show/hide the Microphone section.");
237 
238     add("show_samplers")
239             << tr("Sampler")
240             << tr("Show/hide the Sampler section.");
241 
242     add("show_vinylcontrol")
243             << tr("Vinyl Control")
244             << tr("Show/hide the Vinyl Control section.")
245             << tr("Activate Vinyl Control from the Menu -> Options.");
246 
247     add("show_previewdeck")
248             << tr("Preview Deck")
249             << tr("Show/hide the Preview deck.");
250 
251     add("show_coverart")
252             << tr("Cover Art")
253             << tr("Show/hide Cover Art.");
254 
255     add("show_library_coverart")
256             << tr("Cover Art")
257             << tr("Show/hide Cover Art of the selected track in the library.");
258 
259     add("toggle_4decks")
260             << tr("Toggle 4 Decks")
261             << tr("Switches between showing 2 decks and 4 decks.");
262 
263     add("show_waveforms")
264             << tr("Show/hide the scrolling waveforms");
265 
266     add("show_beatgrid_controls")
267             << tr("Show/hide the beatgrid controls section");
268 
269     add("show_library")
270             << tr("Show Library")
271             << tr("Show or hide the track library.");
272 
273     add("show_effects")
274             << tr("Show Effects")
275             << tr("Show or hide the effects.");
276 
277     add("maximize_library")
278             << tr("Maximize Library")
279             << tr("Hide all skin sections except the decks to have more screen space for the track library.");
280 
281     add("show_mixer")
282             << tr("Toggle Mixer")
283             << tr("Show or hide the mixer.");
284 
285     add("show_vumeters")
286             << tr("Volume Meters")
287             << tr("Show/hide volume meters for channels and master output.");
288 
289     add("microphone_volume")
290             << tr("Microphone Volume")
291             << tr("Adjusts the microphone volume.")
292             << QString("%1: %2").arg(rightClick, resetToDefault);
293 
294     add("microphone_pregain")
295             << tr("Microphone Gain")
296             << tr("Adjusts the pre-fader microphone gain.")
297             << QString("%1: %2").arg(rightClick, resetToDefault);
298 
299     add("auxiliary_pregain")
300             << tr("Auxiliary Gain")
301             << tr("Adjusts the pre-fader auxiliary gain.")
302             << QString("%1: %2").arg(rightClick, resetToDefault);
303 
304     add("microphone_talkover")
305             << tr("Microphone Talk-Over")
306             << tr("Hold-to-talk or short click for latching to")
307             << tr("mix microphone input into the master output.");
308 
309     add("talkover_duck_mode")
310             << tr("Microphone Talkover Mode")
311             << tr("Off: Do not reduce music volume")
312             << tr("Auto: Automatically reduce music volume when microphone volume rises above threshold.")
313             << tr("Manual: Reduce music volume by a fixed amount set by the Strength knob.")
314             << tr("Adjust the amount the music volume is reduced with the Strength knob.");
315 
316     add("talkover_duck_strength")
317             << tr("Microphone Talkover Ducking Strength")
318             << tr("Adjust the amount the music volume is reduced with the Strength knob.")
319             << tr("Behavior depends on Microphone Talkover Mode:")
320             << tr("Off: Does nothing")
321             << tr("Auto: Sets how much to reduce the music volume when the volume of active microphones rises above threshold.")
322             << tr("Manual: Sets how much to reduce the music volume, when talkover is activated regardless of volume of microphone inputs.");
323 
324     QString changeAmount = tr("Change the step-size in the Preferences -> Interface menu.");
325     add("rate_perm_up_rate_perm_up_small")
326             << tr("Raise Pitch")
327             << QString("%1: %2").arg(leftClick, tr("Sets the pitch higher."))
328             << QString("%1: %2").arg(rightClick, tr("Sets the pitch higher in small steps."))
329             << changeAmount;
330 
331     add("rate_perm_down_rate_perm_down_small")
332             << tr("Lower Pitch")
333             << QString("%1: %2").arg(leftClick, tr("Sets the pitch lower."))
334             << QString("%1: %2").arg(rightClick, tr("Sets the pitch lower in small steps."))
335             << changeAmount;
336 
337     add("rate_temp_up_rate_temp_up_small")
338             << tr("Raise Pitch Temporary (Nudge)")
339             << QString("%1: %2").arg(leftClick, tr("Holds the pitch higher while active."))
340             << QString("%1: %2").arg(rightClick, tr("Holds the pitch higher (small amount) while active."))
341             << changeAmount;
342 
343     add("rate_temp_down_rate_temp_down_small")
344             << tr("Lower Pitch Temporary (Nudge)")
345             << QString("%1: %2").arg(leftClick, tr("Holds the pitch lower while active."))
346             << QString("%1: %2").arg(rightClick, tr("Holds the pitch lower (small amount) while active."))
347             << changeAmount;
348 
349     add("filterLow")
350             << tr("Low EQ")
351             << tr("Adjusts the gain of the low EQ filter.")
352             << QString("%1: %2").arg(rightClick, resetToDefault);
353 
354     add("filterMid")
355             << tr("Mid EQ")
356             << tr("Adjusts the gain of the mid EQ filter.")
357             << QString("%1: %2").arg(rightClick, resetToDefault);
358 
359     add("filterHigh")
360             << tr("High EQ")
361             << tr("Adjusts the gain of the high EQ filter.")
362             << QString("%1: %2").arg(rightClick, resetToDefault);
363 
364     QString eqKillLatch = tr("Hold-to-kill or short click for latching.");
365     add("filterHighKill")
366             << tr("High EQ Kill")
367             << tr("Holds the gain of the high EQ to zero while active.")
368             << eqKillLatch;
369 
370     add("filterMidKill")
371             << tr("Mid EQ Kill")
372             << tr("Holds the gain of the mid EQ to zero while active.")
373             << eqKillLatch;
374 
375     add("filterLowKill")
376             << tr("Low EQ Kill")
377             << tr("Holds the gain of the low EQ to zero while active.")
378             << eqKillLatch;
379 
380     QString tempoDisplay = tr("Displays the tempo of the loaded track in BPM (beats per minute).");
381     add("visual_bpm")
382             << tr("Tempo")
383             << tempoDisplay;
384 
385     add("visual_key")
386             //: The musical key of a track
387             << tr("Key")
388             << tr("Displays the current musical key of the loaded track after pitch shifting.");
389 
390     add("bpm_tap")
391             << tr("BPM Tap")
392             << tr("When tapped repeatedly, adjusts the BPM to match the tapped BPM.");
393 
394     add("beats_adjust_slower")
395             << tr("Adjust BPM Down")
396             << tr("When tapped, adjusts the average BPM down by a small amount.");
397 
398     add("beats_adjust_faster")
399             << tr("Adjust BPM Up")
400             << tr("When tapped, adjusts the average BPM up by a small amount.");
401 
402     add("beats_translate_earlier")
403             << tr("Adjust Beats Earlier")
404             << tr("When tapped, moves the beatgrid left by a small amount.");
405 
406     add("beats_translate_later")
407             << tr("Adjust Beats Later")
408             << tr("When tapped, moves the beatgrid right by a small amount.");
409 
410     add("beats_translate_curpos")
411             << tr("Adjust Beatgrid")
412             << QString("%1: %2").arg(leftClick, tr("Adjust beatgrid so the closest beat is aligned with the current play position."))
413             << QString("%1: %2").arg(rightClick, tr("Adjust beatgrid to match another playing deck."));
414 
415     add("beats_translate_match_alignment")
416             << tr("Adjust Beatgrid")
417             << tr("Adjust beatgrid to match another playing deck.");
418 
419     //this is a special case, in some skins we might display a transparent png for bpm_tap on top of visual_bpm
420     add("bpm_tap_visual_bpm")
421             << tr("Tempo and BPM Tap")
422             << tempoDisplay
423             << tr("When tapped repeatedly, adjusts the BPM to match the tapped BPM.");
424 
425     add("shift_cues_earlier")
426             << tr("Shift cues earlier")
427             << tr("Shift cues imported from Serato or Rekordbox if they are slightly off time.")
428             << tr("Left click: shift 10 milliseconds earlier")
429             << tr("Right click: shift 1 millisecond earlier");
430 
431     add("shift_cues_later")
432             << tr("Shift cues later")
433             << tr("Shift cues imported from Serato or Rekordbox if they are slightly off time.")
434             << tr("Left click: shift 10 milliseconds later")
435             << tr("Right click: shift 1 millisecond later");
436 
437     add("show_spinny")
438             << tr("Spinning Vinyl")
439             << tr("Show/hide the spinning vinyl section.");
440 
441     add("keylock")
442             << tr("Keylock")
443             << tr("Prevents the pitch from changing when the rate changes.")
444             << tr("Toggling keylock during playback may result in a momentary audio glitch.");
445 
446     add("hotcue_toggle")
447         <<tr("Changes the number of hotcue buttons displayed in the deck");
448 
449     // Show Rate Control
450     add("rate_toggle")
451         <<tr("Toggle visibility of Rate Control");
452 
453     // Used in cue/hotcue/loop tooltips below.
454     QString quantizeSnap = tr("If quantize is enabled, snaps to the nearest beat.");
455     add("quantize")
456             << tr("Quantize")
457             << tr("Toggles quantization.")
458             << tr("Loops and cues snap to the nearest beat when quantization is enabled.");
459 
460     // Reverse and reverseroll (censor)
461     add("reverse")
462     << tr("Reverse")
463             << QString("%1: %2").arg(leftClick, tr("Reverses track playback during regular playback."))
464             << QString("%1: %2").arg(rightClick, tr("Puts a track into reverse while being held (Censor)."))
465             << tr("Playback continues where the track would have been if it had not been temporarily reversed.");
466 
467     // Currently used for samplers
468     add("play_start")
469             << tr("Play/Pause")
470             << QString("%1: %2").arg(leftClick, tr("Starts playing from the beginning of the track."))
471             << QString("%1: %2").arg(rightClick, tr("Jumps to the beginning of the track and stops."));
472 
473     QString whilePlaying = tr("(while playing)");
474     QString whileStopped = tr("(while stopped)");
475     QString whilePreviewing = tr("(while previewing)");
476     QString cueSet = tr("Places a cue point at the current position on the waveform.");
477     QString cueWhilePlaying = tr("Stops track at cue point, OR go to cue point and play after release (CUP mode).");
478     QString cueWhileStopped = tr("Set cue point (Pioneer/Mixxx/Numark mode), set cue point and play after release (CUP mode) "
479             "OR preview from it (Denon mode).");
480     QString cueHint = tr("Hint: Change the default cue mode in Preferences -> Interface.");
481     QString latchingPlay = tr("Is latching the playing state.");
482 
483     // Currently used for decks
484     add("play_cue_set")
485             << tr("Play/Pause")
486             << QString("%1: %2").arg(leftClick, tr("Plays or pauses the track."))
487             << QString("%1 %2: %3").arg(leftClick, whilePreviewing, latchingPlay)
488             << QString("%1: %2").arg(rightClick, cueSet);
489 
490     // Currently used for minimal decks
491     add("play_cue_default")
492             << tr("Play/Pause")
493             << QString("%1: %2").arg(leftClick, tr("Plays or pauses the track."))
494             << QString("%1 %2: %3").arg(rightClick, whilePlaying, cueWhilePlaying)
495             << QString("%1 %2: %3").arg(rightClick, whileStopped, cueWhileStopped)
496             << cueHint
497             << quantizeSnap;
498     add("cue_default_cue_gotoandstop")
499             << tr("Cue")
500             << QString("%1 %2: %3").arg(leftClick, whilePlaying, cueWhilePlaying)
501             << QString("%1 %2: %3").arg(leftClick, whileStopped, cueWhileStopped)
502             << cueHint
503             << quantizeSnap
504             << QString("%1: %2").arg(rightClick, tr("Seeks the track to the cue point and stops."))
505             << QString("%1 %2: %3").arg(rightClick, whilePreviewing, latchingPlay);
506     add("cue_gotoandplay_cue_default")
507             << tr("Play")
508             << QString("%1: %2").arg(leftClick, tr("Plays track from the cue point."))
509             << QString("%1 %2: %3").arg(rightClick, whilePlaying, cueWhilePlaying)
510             << QString("%1 %2: %3").arg(rightClick, whileStopped, cueWhileStopped)
511             << cueHint
512             << quantizeSnap;
513 
514       add("pfl")
515             << tr("Headphone")
516             << tr("Sends the selected channel's audio to the headphone output, "
517                   "selected in Preferences -> Sound Hardware.");
518 
519     add("mute")
520             << tr("Mute")
521             << tr("Mutes the selected channel's audio in the master output.");
522 
523     add("master_enable")
524             << tr("Master enable")
525             << tr("Hold or short click for latching to "
526                   "mix this input into the master output.");
527 
528     add("back_start")
529             << tr("Fast Rewind")
530             << QString("%1: %2").arg(leftClick, tr("Fast rewind through the track."))
531             << QString("%1: %2").arg(rightClick, tr("Jumps to the beginning of the track."));
532 
533     add("fwd_end")
534             << tr("Fast Forward")
535             << QString("%1: %2").arg(leftClick, tr("Fast forward through the track."))
536             << QString("%1: %2").arg(rightClick, tr("Jumps to the end of the track."));
537 
538     // Ghetto-Sync (TM)
539     add("beatsync_beatsync_tempo")
540             << tr("Old Synchronize")
541             << tr("(This skin should be updated to use Master Sync!)")
542             << QString("%1: %2").arg(leftClick, tr("Syncs the tempo (BPM) and phase to that of the other track, "
543                                                    "if BPM is detected on both."))
544             << QString("%1: %2").arg(rightClick, tr("Syncs the tempo (BPM) to that of the other track, "
545                                                     "if BPM is detected on both."))
546             << tr("Syncs to the first deck (in numerical order) that is playing a track and has a BPM.")
547             << tr("If no deck is playing, syncs to the first deck that has a BPM.")
548             << tr("Decks can't sync to samplers and samplers can only sync to decks.");
549 
550     // Awesome-Sync (TM)
551     add("sync_enabled")
552             << tr("Enable Master Sync")
553             << tr("Tap to sync the tempo to other playing tracks or the master clock.")
554             << tr("Hold for at least a second to enable sync lock for this deck.")
555             << tr("Decks with sync locked will all play at the same tempo, and decks that also have "
556                   "quantize enabled will always have their beats lined up.");
557 
558     // TODO(owen): find a better phrase for "the other deck"
559     add("sync_reset_key")
560             << tr("Sync and Reset Key")
561             << QString("%1: %2").arg(leftClick, tr("Sets the pitch to a key that allows a harmonic transition "
562                                                    "from the other track. Requires a detected key on both involved decks."))
563             << QString("%1: %2").arg(rightClick, tr("Resets the key to the original track key."));
564 
565     add("sync_master")
566             << tr("Enable Sync Clock Master")
567             << tr("When enabled, this device will serve as the master clock for all other decks.");
568 
569     add("rate")
570             << tr("Speed Control")
571             << tr("Changes the track playback speed (affects both the tempo and the pitch). If keylock is enabled, only the tempo is affected.")
572             << QString("%1: %2").arg(rightClick, resetToDefault);
573 
574     add("pitch")
575             << tr("Pitch Control")
576             << tr("Changes the track pitch independent of the tempo.")
577             << QString("%1: %2").arg(rightClick, resetToDefault);
578 
579     add("pitch_up")
580             << tr("Pitch Control")
581             << tr("Changes the track pitch independent of the tempo.")
582             << QString("%1: %2").arg(leftClick, tr("Increases the pitch by one semitone."))
583             << QString("%1: %2").arg(rightClick, tr("Increases the pitch by 10 cents."));
584 
585     add("pitch_down")
586             << tr("Pitch Control")
587             << tr("Changes the track pitch independent of the tempo.")
588             << QString("%1: %2").arg(leftClick, tr("Decreases the pitch by one semitone."))
589             << QString("%1: %2").arg(rightClick, tr("Decreases the pitch by 10 cents."));
590 
591     add("pitch_adjust")
592             << tr("Pitch Adjust")
593             << tr("Adjust the pitch in addition to the speed slider pitch.")
594             << QString("%1: %2").arg(rightClick, resetToDefault);
595 
596 
597     add("rate_display")
598             << tr("Pitch Rate")
599             << tr("Displays the current playback rate of the track.");
600 
601     add("rate_range_display")
602             << tr("Tempo Range Display")
603             << tr("Displays the current range of the tempo slider.");
604 
605     add("repeat")
606             << tr("Repeat")
607             << tr("When active the track will repeat if you go past the end or reverse before the start.");
608 
609     add("eject")
610             << tr("Eject")
611             << tr("Ejects track from the player.");
612 
613     add("hotcue") << tr("Hotcue")
614                   << QString("%1: %2").arg(leftClick,
615                              tr("If hotcue is set, jumps to the hotcue."))
616                   << tr("If hotcue is not set, sets the hotcue to the current "
617                         "play position.")
618                   << quantizeSnap
619                   << QString("%1: %2").arg(rightClick,
620                              tr("Opens a menu to clear hotcues or edit their "
621                                 "labels and colors."))
622                   << QString("%1 + %2: %3")
623                              .arg(rightClick,
624                                      shift,
625                                      tr("Delete selected hotcue."));
626 
627     // Status displays and toggle buttons
628     add("toggle_recording")
629             << tr("Record Mix")
630             << tr("Toggle mix recording.");
631 
632     // Status displays and toggle buttons
633     add("recording_duration")
634             << tr("Recording Duration")
635             << tr("Displays the duration of the running recording.");
636 
637     // For legacy reasons also add tooltips for "shoutcast_enabled".
638     for (const char* key : {"shoutcast_enabled", "broadcast_enabled"}) {
639         add(key)
640                 << tr("Enable Live Broadcasting")
641                 << tr("Stream your mix over the Internet.")
642                 << tr("Provides visual feedback for Live Broadcasting status:")
643                 << tr("disabled, connecting, connected, failure.");
644     }
645 
646     // AutoDJ status indicator
647     add("autodj_status")
648             << tr("Auto DJ is active");
649 
650     add("passthrough_enabled")
651             << tr("Enable Passthrough")
652             << tr("When enabled, the deck directly plays the audio arriving on the vinyl input.");
653 
654     add("vinylcontrol_enabled")
655             << tr("Enable Vinyl Control")
656             << tr("When disabled, the track is controlled by Mixxx playback controls.")
657             << tr("When enabled, the track responds to external vinyl control.");
658 
659     add("vinylcontrol_status")
660             << tr("Vinyl Status")
661             << tr("Provides visual feedback for vinyl control status:")
662             << tr("Green for control enabled.")
663             << tr("Blinking yellow for when the needle reaches the end of the record.")
664             << tr("Blue for passthrough enabled.");
665 
666     add("vinylcontrol_mode")
667             << tr("Vinyl Control Mode")
668             << tr("Absolute mode - track position equals needle position and speed.")
669             << tr("Relative mode - track speed equals needle speed regardless of needle position.")
670             << tr("Constant mode - track speed equals last known-steady speed regardless of needle input.");
671 
672     add("vinylcontrol_cueing")
673             << tr("Vinyl Cueing Mode")
674             << tr("Determines how cue points are treated in vinyl control Relative mode:")
675             << tr("Off - Cue points ignored.")
676             << tr("One Cue - If needle is dropped after the cue point, track will seek to that cue point.")
677             << tr("Hot Cue - Track will seek to nearest previous hotcue point.");
678 
679     add("loop_in")
680             << tr("Loop-In Marker")
681             << QString("%1: %2").arg(leftClick + " " + loopInactive,
682                       tr("Sets the track Loop-In Marker to the current play position."))
683             << quantizeSnap
684             << QString("%1: %2").arg(leftClick + " " + loopActive,
685                       tr("Press and hold to move Loop-In Marker."))
686             << QString("%1: %2").arg(rightClick, tr("Jump to Loop-In Marker."));
687 
688     add("loop_out")
689             << tr("Loop-Out Marker")
690             << QString("%1: %2").arg(leftClick + " " + loopInactive,
691                       tr("Sets the track Loop-Out Marker to the current play position."))
692             << quantizeSnap
693             << QString("%1: %2").arg(leftClick + " " + loopActive,
694                       tr("Press and hold to move Loop-Out Marker."))
695             << QString("%1: %2").arg(rightClick, tr("Jump to Loop-Out Marker."));
696 
697     add("loop_halve")
698             << tr("Loop Halve")
699             << tr("Halves the current loop's length by moving the end marker.")
700             << tr("Deck immediately loops if past the new endpoint.");
701 
702     add("loop_double")
703             << tr("Loop Double")
704             << tr("Doubles the current loop's length by moving the end marker.");
705 
706     add("beatloop_size")
707             << tr("Beatloop Size")
708             << tr("Select the size of the loop in beats to set with the Beatloop button.")
709             << tr("Changing this resizes the loop if the loop already matches this size.");
710 
711     add("beatloop_halve")
712             << tr("Halve the size of an existing beatloop, or halve the size of the next beatloop set with the Beatloop button.");
713 
714     add("beatloop_double")
715             << tr("Double the size of an existing beatloop, or double the size of the next beatloop set with the Beatloop button.");
716 
717     //beatloop and beatlooproll
718     add("beatloop_activate")
719             << tr("Beatloop")
720             << QString("%1: %2").arg(leftClick, tr("Start a loop over the set number of beats."))
721             << quantizeSnap
722             << QString("%1: %2").arg(rightClick, tr("Temporarily enable a rolling loop over the set number of beats."))
723             << tr("Playback will resume where the track would have been if it had not entered the loop.");
724 
725     add("beatjump_size")
726             << tr("Beatjump/Loop Move Size")
727             << tr("Select the number of beats to jump or move the loop with the Beatjump Forward/Backward buttons.");
728 
729     add("beatjump_forward")
730             << tr("Beatjump Forward")
731             << QString("%1: %2").arg(leftClick + " " + loopInactive, tr("Jump forward by the set number of beats."))
732             << QString("%1: %2").arg(leftClick + " " + loopActive, tr("Move the loop forward by the set number of beats."))
733             << QString("%1: %2").arg(rightClick + " " + loopInactive, tr("Jump forward by 1 beat."))
734             << QString("%1: %2").arg(rightClick + " " + loopActive, tr("Move the loop forward by 1 beat."));
735 
736     add("beatjump_backward")
737             << tr("Beatjump Backward")
738             << QString("%1: %2").arg(leftClick + " " + loopInactive, tr("Jump backward by the set number of beats."))
739             << QString("%1: %2").arg(leftClick + " " + loopActive, tr("Move the loop backward by the set number of beats."))
740             << QString("%1: %2").arg(rightClick + " " + loopInactive, tr("Jump backward by 1 beat."))
741             << QString("%1: %2").arg(rightClick + " " + loopActive, tr("Move the loop backward by 1 beat."));
742 
743     add("loop_exit")
744             << tr("Loop Exit")
745             << tr("Turns the current loop off.")
746             << tr("Works only if Loop-In and Loop-Out marker are set.");
747 
748     add("reloop_toggle")
749             << tr("Reloop")
750             << QString("%1: %2").arg(leftClick, tr("Toggles the current loop on or off."))
751             << tr("If the loop is ahead of the current position, looping will start when the loop is reached.")
752             << tr("Works only if Loop-In and Loop-Out Marker are set.")
753             << QString("%1: %2").arg(rightClick, tr("Enable loop, jump to Loop-In Marker, and stop playback."));
754 
755     add("slip_mode")
756             << tr("Slip Mode")
757             << tr("When active, the playback continues muted in the background during a loop, reverse, scratch etc.")
758             << tr("Once disabled, the audible playback will resume where the track would have been.");
759 
760     add("track_time")
761             << tr("Track Time")
762             << tr("Displays the elapsed and/or remaining time of the track loaded.")
763             << tr("Click to toggle between time elapsed/remaining time/both.")
764             << tr("Hint: Change the time format in Preferences -> Decks.");
765 
766     add("track_duration")
767             << tr("Track Duration")
768             << tr("Displays the duration of the loaded track.");
769 
770     QString trackTags = tr("Information is loaded from the track's metadata tags.");
771     add("track_artist")
772             << tr("Track Artist")
773             << tr("Displays the artist of the loaded track.")
774             << trackTags + "\n"
775             << dropTracksHere
776             << dragItem
777             << QString("%1: %2").arg(doubleClick, trackProperties)
778             << QString("%1: %2").arg(rightClick, trackMenu);
779 
780     add("track_title")
781             << tr("Track Title")
782             << tr("Displays the title of the loaded track.")
783             << trackTags + "\n"
784             << dropTracksHere
785             << dragItem
786             << QString("%1: %2").arg(doubleClick, trackProperties)
787             << QString("%1: %2").arg(rightClick, trackMenu);
788 
789     add("track_album")
790             << tr("Track Album")
791             << tr("Displays the album name of the loaded track.")
792             << trackTags + "\n"
793             << dropTracksHere
794             << dragItem
795             << QString("%1: %2").arg(doubleClick, trackProperties)
796             << QString("%1: %2").arg(rightClick, trackMenu);
797 
798     add("track_key")
799             //: The musical key of a track
800             << tr("Track Key")
801             << tr("Displays the musical key of the loaded track.")
802             << trackTags;
803 
804     add("text")
805             << tr("Track Artist/Title")
806             << tr("Displays the artist and title of the loaded track.")
807             << trackTags + "\n"
808             << dropTracksHere
809             << dragItem
810             << QString("%1: %2").arg(doubleClick, trackProperties)
811             << QString("%1: %2").arg(rightClick, trackMenu);
812 
813     add("time")
814             << tr("Clock")
815             << tr("Displays the current time.");
816 
817     add("audio_latency_usage")
818             << tr("Audio Latency Usage Meter")
819             << tr("Displays the fraction of latency used for audio processing.")
820             << tr("A high value indicates that audible glitches are likely.")
821             << tr("Do not enable keylock, effects or additional decks in this situation.");
822 
823     add("audio_latency_overload")
824             << tr("Audio Latency Overload Indicator")
825             << tr("Indicates that the audio buffer is too small to do all audio processing.");
826 
827     add("coverart")
828             << tr("Cover Art")
829             << tr("Displays cover artwork of the loaded track.")
830             << QString("%1: %2").arg(
831                        leftClick, tr("Opens separate artwork viewer."))
832             << QString("%1: %2").arg(rightClick,
833                        tr("Displays options for editing cover artwork.")) +
834                     "\n"
835             << dropTracksHere << dragItem;
836 
837     add("starrating")
838             << tr("Star Rating")
839             << tr("Assign ratings to individual tracks by clicking the stars.");
840 
841     // Intro & outro cues
842     add("show_intro_outro_cues")
843             << tr("Show/hide intro & outro markers and associated buttons.");
844 
845     add("intro_start")
846             << tr("Intro Start Marker")
847             << QString("%1: %2").arg(leftClick, tr("If marker is set, jumps to the marker."))
848             << tr("If marker is not set, sets the marker to the current play position.")
849             << quantizeSnap
850             << QString("%1: %2").arg(rightClick, tr("If marker is set, clears the marker."));
851 
852     add("intro_end")
853             << tr("Intro End Marker")
854             << QString("%1: %2").arg(leftClick, tr("If marker is set, jumps to the marker."))
855             << tr("If marker is not set, sets the marker to the current play position.")
856             << quantizeSnap
857             << QString("%1: %2").arg(rightClick, tr("If marker is set, clears the marker."));
858 
859     add("outro_start")
860             << tr("Outro Start Marker")
861             << QString("%1: %2").arg(leftClick, tr("If marker is set, jumps to the marker."))
862             << tr("If marker is not set, sets the marker to the current play position.")
863             << quantizeSnap
864             << QString("%1: %2").arg(rightClick, tr("If marker is set, clears the marker."));
865 
866     add("outro_end")
867             << tr("Outro End Marker")
868             << QString("%1: %2").arg(leftClick, tr("If marker is set, jumps to the marker."))
869             << tr("If marker is not set, sets the marker to the current play position.")
870             << quantizeSnap
871             << QString("%1: %2").arg(rightClick, tr("If marker is set, clears the marker."));
872 
873     // Effect Unit Controls
874     add("EffectUnit_clear")
875             << tr("Clear Unit")
876             << tr("Clear effect unit.");
877 
878     add("EffectUnit_show_parameters")
879             << tr("Show Effect Parameters")
880             << tr("Show/hide parameters for effects in this unit.");
881 
882     add("EffectUnit_enabled")
883             << tr("Toggle Unit")
884             << tr("Enable or disable this whole effect unit.");
885     add("EffectUnit_mix")
886             << tr("Mix")
887             << tr("Adjust the mixing of the dry (input) signal with the wet (output) signal of the effect unit")
888             << tr("D/W mode: Crossfade between dry and wet")
889             << tr("D+W mode: Add wet to dry")
890             << QString("%1: %2").arg(rightClick, resetToDefault);
891 
892     add("EffectUnit_mix_mode")
893             << tr("Mix Mode")
894             << tr("Adjust how the dry (input) signal is mixed with the wet (output) signal of the effect unit") + "\n"
895             << tr("Dry/Wet mode (crossed lines): Mix knob crossfades between dry and wet\n"
896                   "Use this to change the sound of the track with EQ and filter effects.") + "\n"
897             << tr("Dry+Wet mode (flat dry line): Mix knob adds wet to dry\n"
898                   "Use this to change only the effected (wet) signal with EQ and filter effects.");
899 
900     add("EffectUnit_super1")
901             << tr("Super Knob")
902             << tr("Controls the Meta Knob of all effects in this unit together.")
903             << QString("%1: %2").arg(rightClick, resetToDefault);
904 
905     add("EffectUnit_next_chain")
906             << tr("Next Chain")
907             << tr("Load next effect chain preset into this effect unit.");
908 
909     add("EffectUnit_prev_chain")
910             << tr("Previous Chain")
911             << tr("Load previous effect chain preset into this effect unit.");
912 
913     add("EffectUnit_chain_selector")
914             << tr("Next/Previous Chain")
915             << tr("Load next or previous effect chain preset into this effect unit.");
916 
917     add("EffectUnit_group_enabled")
918             << tr("Assign Effect Unit")
919             << tr("Assign this effect unit to the channel output.")
920             << effectsWithinUnit;
921 
922     add("EffectUnit_headphones_enabled")
923             << tr("Assign Effect Unit")
924             << tr("Route the headphone channel through this effect unit.")
925             << effectsWithinUnit;
926 
927     add("EffectUnit_master_enabled")
928             << tr("Assign Effect Unit")
929             << tr("Route the master mix through this effect unit.")
930             << effectsWithinUnit;
931 
932     add("EffectUnit_BusLeft_enabled")
933             << tr("Assign Effect Unit")
934             << tr("Route the left crossfader bus through this effect unit.")
935             << effectsWithinUnit;
936 
937     add("EffectUnit_BusRight_enabled")
938             << tr("Assign Effect Unit")
939             << tr("Route the right crossfader bus through this effect unit.")
940             << effectsWithinUnit;
941 
942     add("EffectUnit_deck_enabled")
943             << tr("Assign Effect Unit")
944             << tr("Route this deck through the indicated effect unit.")
945             << effectsWithinUnit;
946 
947     add("EffectUnit_sampler_enabled")
948             << tr("Assign Effect Unit")
949             << tr("Route this sampler through the indicated effect unit.")
950             << effectsWithinUnit;
951 
952     add("EffectUnit_microphone_enabled")
953             << tr("Assign Effect Unit")
954             << tr("Route this microphone through the indicated effect unit.")
955             << effectsWithinUnit;
956 
957     add("EffectUnit_auxiliary_enabled")
958             << tr("Assign Effect Unit")
959             << tr("Route this auxiliary input through the indicated effect unit.")
960             << effectsWithinUnit;
961 
962     // Effect Slot Controls
963     add("EffectSlot_clear")
964             << tr("Clear")
965             << tr("Clear the current effect.");
966 
967     add("EffectSlot_enabled")
968             << tr("Enable Effect")
969             << tr("The effect unit must also be assigned to a deck or other sound source to hear the effect.");
970 
971     add("EffectSlot_next_effect")
972             << tr("Next")
973             << tr("Switch to the next effect.");
974 
975     add("EffectSlot_prev_effect")
976             << tr("Previous")
977             << tr("Switch to the previous effect.");
978 
979     add("EffectSlot_effect_selector")
980             << tr("Next or Previous")
981             << tr("Switch to either the next or previous effect.");
982 
983     add("EffectSlot_metaknob")
984             << tr("Meta Knob")
985             << tr("Controls linked parameters of this effect")
986             << QString("%1: %2").arg(rightClick, resetToDefault);
987 
988     add("EffectSlot_focus")
989             << tr("Effect Focus Button")
990             << QString("%1: %2").arg(leftClick, tr("Focuses this effect."))
991             << QString("%1: %2").arg(rightClick, tr("Unfocuses this effect."))
992             << tr("Refer to the web page on the Mixxx wiki for your controller for more information.");
993 
994     add("EffectSlot_parameter")
995             << tr("Effect Parameter")
996             << tr("Adjusts a parameter of the effect.")
997             << QString("%1: %2").arg(rightClick, resetToDefault);
998 
999     add("EffectSlot_parameter_link_type")
1000             << tr("Meta Knob Link")
1001             << tr("Set how this parameter is linked to the effect's Meta Knob.")
1002             << tr("Inactive: parameter not linked")
1003             << tr("Active: parameter moves with Meta Knob")
1004             << tr("Left side active: parameter moves with left half of Meta Knob turn")
1005             << tr("Right side active: parameter moves with right half of Meta Knob turn")
1006             << tr("Left and right side active: parameter moves across range with half of Meta Knob turn and back with the other half");
1007 
1008     add("EffectSlot_parameter_inversion")
1009             << tr("Meta Knob Link Inversion")
1010             << tr("Inverts the direction this parameter moves when turning the effect's Meta Knob.");
1011 
1012     add("EffectSlot_button_parameter")
1013             << tr("Equalizer Parameter Kill")
1014             << tr("Holds the gain of the EQ to zero while active.")
1015             << eqKillLatch;
1016 
1017     // Quick Effect Rack Controls
1018     add("QuickEffectRack_super1")
1019             << tr("Quick Effect Super Knob")
1020             << tr("Quick Effect Super Knob (control linked effect parameters).")
1021             << QString("%1: %2").arg(rightClick, resetToDefault)
1022             << tr("Hint: Change the default Quick Effect mode in Preferences -> Equalizers.");
1023 
1024     add("QuickEffectRack_enabled")
1025             << tr("Toggle")
1026             << tr("Toggle the current effect.")
1027             << eqKillLatch;
1028 
1029     // Equalizer Rack Controls
1030     add("EqualizerRack_effect_parameter")
1031             << tr("Equalizer Parameter")
1032             << tr("Adjusts the gain of the EQ filter.")
1033             << QString("%1: %2").arg(rightClick, resetToDefault)
1034             << tr("Hint: Change the default EQ mode in Preferences -> Equalizers.");
1035 
1036     add("EqualizerRack_effect_button_parameter")
1037             << tr("Equalizer Parameter Kill")
1038             << tr("Holds the gain of the EQ to zero while active.")
1039             << eqKillLatch;
1040 
1041     add("skin_settings")
1042             << tr("Skin Settings Menu")
1043             << tr("Show/hide skin settings menu");
1044 
1045     // Sampler Bank Controls
1046     add("SaveSamplerBank")
1047             << tr("Save Sampler Bank")
1048             << tr("Save the collection of samples loaded in the samplers.");
1049 
1050     add("LoadSamplerBank")
1051             << tr("Load Sampler Bank")
1052             << tr("Load a previously saved collection of samples into the samplers.");
1053 
1054     add("configure_input")
1055             << tr("Select and configure a hardware device for this input");
1056 
1057 }
1058