diff --git a/TODO b/TODO index a0ca5c43..ffd4605f 100644 --- a/TODO +++ b/TODO @@ -1,6 +1,6 @@ TO DO for Seq66 0.99.8 Chris Ahlstrom -2019-04-13 to 2023-08-13 +2019-04-13 to 2023-08-14 UI: @@ -11,7 +11,10 @@ UI: Easy to forget to push that button. - Look into connecting the save-playlist and save-mutes functions. - Make sure L/R looping buttons (main and song) works. - - Clarify the two transpose button in the song editor. + - Clarify the two transpose buttons in the song editor. + - There is no "Loop Mode" (loop_mode) automation slot. + The slot is a mislabelled record_style automation slot! + - Add the #114 tool-tip upgrades to the pattern editor. Some of these issues will be pushed off for the distant Seq66v2. diff --git a/data/share/doc/control_keys.ods b/data/share/doc/control_keys.ods index 0df9dd14..4b51a5c5 100644 Binary files a/data/share/doc/control_keys.ods and b/data/share/doc/control_keys.ods differ diff --git a/doc/latex/tex/patterns_panel.tex b/doc/latex/tex/patterns_panel.tex index 7b2fa9d0..b64ba641 100644 --- a/doc/latex/tex/patterns_panel.tex +++ b/doc/latex/tex/patterns_panel.tex @@ -679,8 +679,9 @@ \subsubsection{Pattern Keys and Clicks} arrangement of soloing is memorized. One can clear the queue mode by pressing the normal queue key. - There are more keys defined in the \textbf{Keyboard} dialog, and it is + There are more keys defined in the 'ctrl' file, and it is worth figuring out what they do, if not documented here. + Also see the installed \texttt{control\_keys.ods} spreadsheet. For a couple of short, but good, video tutorials about using arming, queuing, and snapshots, see reference \cite{wootangent1}. diff --git a/libseq66/include/ctrl/automation.hpp b/libseq66/include/ctrl/automation.hpp index 05c4f12e..66e68386 100644 --- a/libseq66/include/ctrl/automation.hpp +++ b/libseq66/include/ctrl/automation.hpp @@ -239,7 +239,7 @@ enum class slot reserved_48, /**< 48: Reserved for expansion. */ /* - * Proposed massive expansion in automation. Record mode selection. + * Massive expansion in automation. Record mode selection. */ record_overdub, /**< 49: Select overdub/merge recording triggering. */ @@ -248,7 +248,7 @@ enum class slot record_oneshot, /**< 52: Select oneshot recording triggering. */ /* - * Proposed massive expansion in automation. Grid mode selection. + * Massive expansion in automation. Grid mode selection. */ grid_loop, /**< 53: Normal operation of the main grid. */ diff --git a/libseq66/src/ctrl/opcontrol.cpp b/libseq66/src/ctrl/opcontrol.cpp index 3a260ae0..5ef4a208 100644 --- a/libseq66/src/ctrl/opcontrol.cpp +++ b/libseq66/src/ctrl/opcontrol.cpp @@ -25,7 +25,7 @@ * \library seq66 application * \author Chris Ahlstrom * \date 2018-12-04 - * \updates 2023-03-18 + * \updates 2023-08-14 * \license GNU GPLv2 or above * */ @@ -186,7 +186,7 @@ opcontrol::automation_slot_name (slot s) "BPM Page Up", // 14 bpm_page_up "BPM Page Dn", // 15 bpm_page_dn "Set Set", // 16 ss_set - "Loop Mode", // 17 loop_mode (increment/decrement) + "Record Style", // 17 record_style (increment/decrement) "Quan Record", // 18 quan_record "Reset Sets", // 19 reset_sets "One-shot", // 20 mod_oneshot * @@ -198,7 +198,7 @@ opcontrol::automation_slot_name (slot s) "Tap BPM", // 26 tap_bpm * "Start", // 27 start "Stop", // 28 stop ? - "Reserved 29", // 29 reserved_29 + "Loop L/R", // 29 loop_LR "Toggle Mute", // 30 toggle_mutes * "Song Pos", // 31 song_pointer diff --git a/libseq66/src/play/performer.cpp b/libseq66/src/play/performer.cpp index 1589f065..7bca920e 100644 --- a/libseq66/src/play/performer.cpp +++ b/libseq66/src/play/performer.cpp @@ -24,7 +24,7 @@ * \library seq66 application * \author Chris Ahlstrom and others * \date 2018-11-12 - * \updates 2023-08-13 + * \updates 2023-08-14 * \license GNU GPLv2 or above * * Also read the comments in the Seq64 version of this module, perform. @@ -9790,7 +9790,7 @@ performer::sm_auto_func_list [] = * Terminator */ - { automation::slot::max, &performer::automation_no_op } + { automation::slot::max, &performer::automation_no_op } }; } // namespace seq66 diff --git a/seq_qt5/forms/qperfeditframe64.ui b/seq_qt5/forms/qperfeditframe64.ui index a2adddbc..2f0f2893 100644 --- a/seq_qt5/forms/qperfeditframe64.ui +++ b/seq_qt5/forms/qperfeditframe64.ui @@ -81,7 +81,7 @@ 0 0 16 - 306 + 310 @@ -116,7 +116,7 @@ 0 0 689 - 308 + 312 @@ -207,7 +207,7 @@ - TIme-line and L and R markers. + Time-line and L and R markers. @@ -316,7 +316,7 @@ Qt::NoFocus - Undo the previous operation(s). + Undo previous operation(s). [ Ctrl-Z ] @@ -350,7 +350,7 @@ Qt::NoFocus - Redo the last operations(s). + Redo last operations(s). [ Shift-Ctrl-Z ] @@ -378,8 +378,7 @@ - If active, the piano roll scrolls to -follow progress bar. + Set piano roll to follow progress bar. @@ -414,7 +413,7 @@ follow progress bar. Qt::NoFocus - Zoom out horizontally in the piano roll. + Zoom out horizontally in piano roll. [ z ] The 0 key resets zoom. @@ -443,7 +442,7 @@ follow progress bar. Qt::NoFocus - Zoom in horizontally in the piano roll. + Zoom in horizontally in piano roll. [ Z ] The 0 key resets zoom. @@ -497,10 +496,9 @@ to leave ] - Turns on "song record" snap. An added -trigger snaps to the full length of the -pattern or to the snap setting. -Growing occurs at snap length. + Set "song record" snap. An added +trigger snaps to the length of the pattern +or snap setting. Growth occurs at snap length. Snap @@ -528,9 +526,9 @@ Growing occurs at snap length. Qt::NoFocus - Selects the movement and sizing snap -value. "L" = full length. "1/N" means 1/Nth -of a measure. Affects the L/R markers. Use + Selects movement and sizing snap +value. "L" = full length. "1/N" is 1/Nth +of a measure. Affects L/R markers. Use L only for short patterns. @@ -589,7 +587,7 @@ Transposition is done during playback. - 28 + 36 28 @@ -603,8 +601,7 @@ Transposition is done during playback. Qt::NoFocus - Sets looping between the L and R -markers. + Set looping between L/R markers. Loop @@ -639,7 +636,7 @@ markers. - 40 + 36 28 @@ -653,7 +650,7 @@ markers. Qt::NoFocus - Collapse pattern between L and R markers. + Collapse pattern between L/R markers. @@ -670,7 +667,7 @@ markers. - 40 + 36 28 @@ -684,7 +681,7 @@ markers. Qt::NoFocus - Expand space between L and R markers. + Expand space between L/R markers. @@ -701,7 +698,7 @@ markers. - 40 + 36 28 @@ -715,8 +712,7 @@ markers. Qt::NoFocus - Expand and copy between the -L and R markers. + Expand and copy between L/R markers. @@ -744,8 +740,8 @@ L and R markers. - Expands the piano roll to the right -to allow more room for editing. + Expand piano roll to the right +for more editing room. --> @@ -775,7 +771,7 @@ to allow more room for editing. - Resets the Trigger Transpose to 0. + Resets Trigger Transpose to 0. TT @@ -799,7 +795,7 @@ to allow more room for editing. Transposition value for Trigger Transpose. Range: -60 to +60 (5 octaves each way). -Apply it to a trigger block via Ctrl-right-click. +Apply it to a trigger via Shift-Right click. To reset, set to 0 and apply it. @@ -819,7 +815,7 @@ To reset, set to 0 and apply it. - Shows the duration of the song based + Shows duration of the song based on the longest track or Song layout. Click to toggle between H:M:S and B:B:T format. diff --git a/seq_qt5/forms/qseqeditframe64.ui b/seq_qt5/forms/qseqeditframe64.ui index 0d9b3ed2..61582db5 100644 --- a/seq_qt5/forms/qseqeditframe64.ui +++ b/seq_qt5/forms/qseqeditframe64.ui @@ -214,7 +214,7 @@ - Toggles the transposability of this pattern. + Toggles transposability of this pattern. Transp @@ -236,8 +236,8 @@ - If the sequence is transposable, this button applies -the note-map, if any, to the note events in this pattern. + If transposable, apply active note-map +to note events. Map @@ -290,7 +290,7 @@ the note-map, if any, to the note events in this pattern. - Resets the selected chord generation to Off. + Resets chord generation to Off. Chord @@ -441,9 +441,7 @@ the note-map, if any, to the note events in this pattern. - Closes this window and any child windows. -A workaround for Qt's lack of a signal for closing -a non-main window frame. + Closes this window and child windows. Fails. Hidden. X @@ -480,7 +478,7 @@ a non-main window frame. - Undo the last operation(s). + Undo previous operation(s). [ Ctrl-Z ] U @@ -502,7 +500,7 @@ a non-main window frame. - Redo the last operation(s). + Redo last operation(s). [ Shift-Ctrl-Z ] R @@ -524,7 +522,7 @@ a non-main window frame. - Quantize the selected notes. + Quantize the selected notes. [ q r t ] Q @@ -549,7 +547,7 @@ a non-main window frame. - Brings up the Tools popup menus. + Shows the Tools popup menus. T @@ -574,7 +572,7 @@ a non-main window frame. - If active, the pattern piano roll scrolls to follow the progress bar in playback. + Set the piano roll to follow progress bar. F @@ -599,8 +597,8 @@ a non-main window frame. - Snap size for spacing drawn notes. Resets it to -default snap size. + Snap size for spacing drawn notes. +Resets to default snap size. S @@ -631,7 +629,7 @@ default snap size. - Selects the snap size for the spacing of drawn events. + Selects snap size for spacing drawn events. @@ -650,7 +648,7 @@ default snap size. - Sets the note length to generate using the mouse back + Sets note length for drawing to the default value, 1/16. @@ -720,9 +718,9 @@ to the default value, 1/16. - Horizontal zoom level in 'pixels:ticks'. The number + Horizontal zoom level in 'pixels:ticks', the number of ticks or pulses represented by 1 pixel. A lower value -zooms 'in'. +zooms 'in' [ z 0 Z ]. @@ -741,7 +739,7 @@ zooms 'in'. - Musical key selection. Resets key selection to 'C'. + Musical key selection. Resets key selection to C. K @@ -763,7 +761,7 @@ zooms 'in'. - Selects the desired musical key to apply. + Selects the musical key to apply. @@ -782,7 +780,7 @@ zooms 'in'. - Musical scale selection. Resets scale to Off (Chromatic). + Resets musical scale to Off. S @@ -810,7 +808,7 @@ zooms 'in'. - Selects musical scale to show on piano roll background. + Musical scale to show on piano roll background. @@ -866,7 +864,7 @@ zooms 'in'. - The other pattern/sequence to show on background of piano roll. + Another pattern/sequence to show on piano roll background. Off @@ -911,7 +909,7 @@ zooms 'in'. - Event to show in data panel, popup menu. + Event to show in data panel popup menu. Event @@ -933,7 +931,7 @@ zooms 'in'. - Present events to show, popup menu. + Present event-to-show popup menu. Data @@ -958,7 +956,7 @@ zooms 'in'. - Displays the name of the event being shown. + Displays name of event being shown. Note On @@ -1014,7 +1012,7 @@ zooms 'in'. - Brings up an LFO window to modulate the data values. + Brings up an LFO window to modulate data values. LFO @@ -1036,10 +1034,10 @@ zooms 'in'. - Provides the number of repetitions in Live mode. -The default, 0, means the normal unlimited repetitions. -A value of 1 is a "one-shot" loop. Values up to 999 are -supported by this control. + The number of repetitions in Live mode. +0 (default) means unlimited repetitions. +A value of 1 is a "one-shot" loop. +Values up to 999 are supported by this control. 999 @@ -1224,7 +1222,8 @@ Oneshot recording of a pattern. - Selects the Free mode of recording (incoming velocity), or a velocity to force upon input. + Selects the Free mode of recording (incoming velocity), +or a velocity to force upon input. @@ -1264,7 +1263,7 @@ Oneshot recording of a pattern. - Vertical zoom out. Same as the 'v' key in the piano roll. + Vertical zoom out. [ v ]. - @@ -1286,8 +1285,7 @@ Oneshot recording of a pattern. - Vertical zoom reset (to defined "key height"). Same as -the '0' key in the piano roll. + Vertical zoom reset. [ 0 ] 0 @@ -1309,7 +1307,7 @@ the '0' key in the piano roll. - Vertical zoom in. Same as the 'V' key in the piano roll. + Vertical zoom in. [ V ] + @@ -1500,8 +1498,8 @@ the '0' key in the piano roll. - Click to add the current time signature as a -meta event at the position of the L marker. + Add the current time signature as a +meta event at the L marker. 3/4 @@ -1613,7 +1611,7 @@ meta event at the position of the L marker. - Selects the beat width, the denominator of the time signature. + Selects beat width (denominator of time signature). true @@ -1678,7 +1676,8 @@ meta event at the position of the L marker. - Selects the length of the pattern for this sequence. Note that it can be overridden by the "Merge" setting below. + Selects the pattern length. It can be +overridden by the "Merge" setting below. true @@ -1700,7 +1699,7 @@ meta event at the position of the L marker. - Selects a chord to generate automatically when each note is created. + Selects a chord to generate when each note is created. @@ -1762,7 +1761,7 @@ meta event at the position of the L marker. - Selects the MIDI output buss for this pattern. It is stored with the pattern. + Selects MIDI output buss; stored with the pattern. @@ -1815,7 +1814,7 @@ meta event at the position of the L marker. - Selects the MIDI output channel for this pattern. It is stored with the pattern. + Selects MIDI output channel; stored with the pattern. diff --git a/seq_qt5/forms/qslivegrid.ui b/seq_qt5/forms/qslivegrid.ui index 1e201111..3054f13d 100644 --- a/seq_qt5/forms/qslivegrid.ui +++ b/seq_qt5/forms/qslivegrid.ui @@ -134,7 +134,7 @@ - Edit the set/bank name in this field. + Edit the Set/Bank name here. @@ -284,7 +284,7 @@ - Cycles through the recording styles. + Cycles through recording styles. LMode @@ -306,7 +306,7 @@ - Cycles through quantization modes for recording. + Cycles through quantized recording modes. RMode diff --git a/seq_qt5/forms/qsmainwnd.ui b/seq_qt5/forms/qsmainwnd.ui index 9b2f9c49..be8aeba2 100644 --- a/seq_qt5/forms/qsmainwnd.ui +++ b/seq_qt5/forms/qsmainwnd.ui @@ -92,6 +92,7 @@ DejaVu Sans 12 + 75 false true PreferDefault @@ -301,6 +302,7 @@ the current set. Modifies the song. DejaVu Sans 12 + 75 true PreferDefault @@ -357,6 +359,7 @@ the current set. Modifies the song. + 75 true PreferDefault @@ -704,6 +707,7 @@ the current set. Modifies the song. + 75 true PreferDefault @@ -729,6 +733,7 @@ the current set. Modifies the song. + 75 true PreferDefault @@ -765,6 +770,7 @@ the current set. 9 + 50 false PreferDefault @@ -820,6 +826,7 @@ no matter what sets-mode is in force. + 75 true PreferDefault @@ -851,6 +858,7 @@ no matter what sets-mode is in force. + 75 true PreferDefault @@ -896,6 +904,7 @@ or active external live frame. + 75 true PreferDefault @@ -924,6 +933,7 @@ or active external live frame. + 75 true PreferDefault @@ -966,7 +976,7 @@ or active external live frame. Qt::NoFocus - Sends a global note off signal + Panic! Turns off all notes. Panic @@ -1006,8 +1016,7 @@ or active external live frame. Qt::NoFocus - Stop playback. With Shift, also rewind -transport. + Stop playback. Shift-click rewinds transport. Stop @@ -1038,8 +1047,7 @@ transport. - Pauses playback, so that the current -location is preserved. + Pause/continue. Preserves current location. Pause @@ -1070,7 +1078,7 @@ location is preserved. Qt::NoFocus - Start playback. + Start/continue playback. Play @@ -1098,7 +1106,7 @@ location is preserved. - Activate looping between L and R. + Activate L/R looping. Loop @@ -1174,6 +1182,12 @@ at start of playback. 28 + + + 75 + true + + Shows/toggles keep-queue status. Does not show one-shot queue @@ -1240,7 +1254,7 @@ in the Shift of that key. 56 - 0 + 20 @@ -1353,12 +1367,13 @@ Editor triggers. + 75 true PreferDefault - Shows the current PPQN + PPQN 192 @@ -1417,9 +1432,9 @@ format in the clock. - Tap in time to set beats per minute -(BPM). After 5 seconds of no taps, -the tap-counter resets to 0. + Tap in time to set beats/minute (BPM). +After 5 seconds of no taps, the counter +resets to 0. 0 @@ -1442,6 +1457,7 @@ the tap-counter resets to 0. + 75 true PreferDefault @@ -1473,6 +1489,7 @@ the tap-counter resets to 0. + 75 true PreferDefault @@ -1510,7 +1527,7 @@ beats/minute. 0 0 900 - 27 + 21 diff --git a/seq_qt5/src/qperfeditframe64.cpp b/seq_qt5/src/qperfeditframe64.cpp index 70150526..854c64a9 100644 --- a/seq_qt5/src/qperfeditframe64.cpp +++ b/seq_qt5/src/qperfeditframe64.cpp @@ -25,7 +25,7 @@ * \library seq66 application * \author Chris Ahlstrom * \date 2018-07-18 - * \updates 2023-08-13 + * \updates 2023-08-14 * \license GNU GPLv2 or above * */ @@ -203,6 +203,9 @@ qperfeditframe64::qperfeditframe64 /* * Undo and Redo buttons. + * + * tooltip_with_keystroke(ui->btnUndo, "Ctrl-Z"); + * tooltip_with_keystroke(ui->btnUndo, "Shift-Ctrl-Z"); */ connect(ui->btnUndo, SIGNAL(clicked(bool)), m_perfroll, SLOT(undo())); @@ -214,6 +217,10 @@ qperfeditframe64::qperfeditframe64 * Follow Progress Button. Qt::NoFocus is the default focus policy. */ + std::string keyname = + perf().automation_key(automation::slot::follow_transport); + + tooltip_with_keystroke(ui->m_toggle_follow, keyname); qt_set_icon(follow_xpm, ui->m_toggle_follow); ui->m_toggle_follow->setEnabled(true); ui->m_toggle_follow->setCheckable(true); diff --git a/seq_qt5/src/qseqeditframe64.cpp b/seq_qt5/src/qseqeditframe64.cpp index 0b7a0bf3..37bf78e9 100644 --- a/seq_qt5/src/qseqeditframe64.cpp +++ b/seq_qt5/src/qseqeditframe64.cpp @@ -25,7 +25,7 @@ * \library seq66 application * \author Chris Ahlstrom * \date 2018-06-15 - * \updates 2023-07-02 + * \updates 2023-08-14 * \license GNU GPLv2 or above * * The data pane is the drawing-area below the seqedit's event area, and @@ -446,7 +446,6 @@ qseqeditframe64::qseqeditframe64 * the beats per measure combo-box, and set the default. */ - qt_set_icon(down_xpm, ui->m_button_bw); connect ( @@ -532,6 +531,9 @@ qseqeditframe64::qseqeditframe64 ui->m_toggle_drum, SIGNAL(toggled(bool)), this, SLOT(editor_mode(bool)) ); + + std::string keyname = perf().automation_key(automation::slot::loop_LR); + tooltip_with_keystroke(ui->m_button_loop, keyname); connect ( ui->m_button_loop, SIGNAL(toggled(bool)), diff --git a/seq_qt5/src/qslivegrid.cpp b/seq_qt5/src/qslivegrid.cpp index 570fc227..df6ab00e 100644 --- a/seq_qt5/src/qslivegrid.cpp +++ b/seq_qt5/src/qslivegrid.cpp @@ -24,7 +24,7 @@ * \library seq66 application * \author Chris Ahlstrom * \date 2019-06-21 - * \updates 2023-04-26 + * \updates 2023-08-14 * \license GNU GPLv2 or above * * This class is the Qt counterpart to the mainwid class. This version is @@ -206,11 +206,18 @@ qslivegrid::qslivegrid ui->buttonBackgroundRecord->setEnabled(background_record); show_grid_record_style(); show_record_mode(); + + std::string keyname; // = + // cb_perf().automation_key(automation::slot::record_style); + connect ( ui->buttonLoopMode, SIGNAL(clicked(bool)), this, SLOT(slot_grid_record_style(bool)) ); + + keyname = cb_perf().automation_key(automation::slot::record_style); + tooltip_with_keystroke(ui->buttonRecordMode, keyname); connect ( ui->buttonRecordMode, SIGNAL(clicked(bool)), diff --git a/seq_qt5/src/qsmainwnd.cpp b/seq_qt5/src/qsmainwnd.cpp index 2e5b058f..5038159c 100644 --- a/seq_qt5/src/qsmainwnd.cpp +++ b/seq_qt5/src/qsmainwnd.cpp @@ -24,7 +24,7 @@ * \library seq66 application * \author Chris Ahlstrom * \date 2018-01-01 - * \updates 2023-08-13 + * \updates 2023-08-14 * \license GNU GPLv2 or above * * The main window is known as the "Patterns window" or "Patterns panel". It @@ -686,10 +686,10 @@ qsmainwnd::qsmainwnd /* * Group-learn ("L") button. - * - * CONTINUE HERE!!!!!! */ + keyname = cb_perf().automation_key(automation::slot::mod_glearn); + tooltip_with_keystroke(ui->button_learn, keyname); connect ( ui->button_learn, SIGNAL(clicked(bool)), @@ -701,6 +701,8 @@ qsmainwnd::qsmainwnd * Tap BPM button. */ + keyname = cb_perf().automation_key(automation::slot::tap_bpm); + tooltip_with_keystroke(ui->button_tap_bpm, keyname); connect ( ui->button_tap_bpm, SIGNAL(clicked(bool)), @@ -711,6 +713,8 @@ qsmainwnd::qsmainwnd * Keep Queue button. */ + keyname = cb_perf().automation_key(automation::slot::keep_queue); + tooltip_with_keystroke(ui->button_keep_queue, keyname); connect ( ui->button_keep_queue, SIGNAL(clicked(bool)), @@ -722,6 +726,10 @@ qsmainwnd::qsmainwnd * BPM (beats-per-minute) spin-box. */ + std::string keysnames = cb_perf().automation_key(automation::slot::bpm_dn); + keysnames += " "; + keysnames += cb_perf().automation_key(automation::slot::bpm_up); + tooltip_with_keystroke(ui->spinBpm, keysnames); m_main_bpm = cb_perf().bpm(); ui->spinBpm->setReadOnly(false); ui->spinBpm->setDecimals(usr().bpm_precision()); @@ -803,6 +811,8 @@ qsmainwnd::qsmainwnd * Panic button. */ + keyname = cb_perf().automation_key(automation::slot::panic); + tooltip_with_keystroke(ui->btnPanic, keyname); connect(ui->btnPanic, SIGNAL(clicked(bool)), this, SLOT(panic())); qt_set_icon(panic_xpm, ui->btnPanic); @@ -813,6 +823,10 @@ qsmainwnd::qsmainwnd QString bname = qt(cb_perf().set_name(0)); ui->txtBankName->setText(bname); ui->spinBank->setRange(0, cb_perf().screenset_max() - 1); + keysnames = cb_perf().automation_key(automation::slot::ss_dn); + keysnames += " "; + keysnames += cb_perf().automation_key(automation::slot::ss_up); + tooltip_with_keystroke(ui->spinBank, keysnames); connect ( ui->setHomeButton, SIGNAL(clicked(bool)),