From c781c24ae64c3789f747caff4b1d0fca329cacf0 Mon Sep 17 00:00:00 2001 From: vsariola <5684185+vsariola@users.noreply.github.com> Date: Mon, 15 Feb 2021 23:57:35 +0200 Subject: [PATCH] feat(tracker): add F1-F8 shortcut keys for changing editmode / playing Related to #14 --- tracker/keyevent.go | 55 ++++++++++++++++++++++++++++++++++++++++++++- tracker/tracker.go | 9 ++------ 2 files changed, 56 insertions(+), 8 deletions(-) diff --git a/tracker/keyevent.go b/tracker/keyevent.go index 25f2c59..05712d5 100644 --- a/tracker/keyevent.go +++ b/tracker/keyevent.go @@ -121,6 +121,47 @@ func (t *Tracker) KeyEvent(w *app.Window, e key.Event) bool { t.LoadSongFile() return true } + case "F1": + t.EditMode = EditPatterns + return true + case "F2": + t.EditMode = EditTracks + return true + case "F3": + t.EditMode = EditUnits + return true + case "F4": + t.EditMode = EditParameters + return true + case "F5": + t.NoteTracking = true + t.PlayPosition.Pattern = t.Cursor.Pattern + if t.EditMode == EditPatterns { + t.PlayPosition.Row = 0 + } else { + t.PlayPosition.Row = t.Cursor.Row + } + t.PlayPosition.Row-- // TODO: we advance soon to make up for this -1, but this is not very elegant way to do it + t.SetPlaying(true) + return true + case "F6": + t.NoteTracking = false + t.PlayPosition.Pattern = t.Cursor.Pattern + if t.EditMode == EditPatterns { + t.PlayPosition.Row = 0 + } else { + t.PlayPosition.Row = t.Cursor.Row + } + t.PlayPosition.Row-- // TODO: we advance soon to make up for this -1, but this is not very elegant way to do it + t.SetPlaying(true) + return true + case "F7": + t.NoteTracking = false + t.SetPlaying(true) + return true + case "F8": + t.SetPlaying(false) + return true case key.NameDeleteForward: switch t.EditMode { case EditTracks: @@ -131,7 +172,19 @@ func (t *Tracker) KeyEvent(w *app.Window, e key.Event) bool { return true } case "Space": - t.TogglePlay() + t.SetPlaying(!t.Playing) + if t.Playing { + if !e.Modifiers.Contain(key.ModShortcut) { + t.NoteTracking = true + } + t.PlayPosition.Pattern = t.Cursor.Pattern + if t.EditMode == EditPatterns { + t.PlayPosition.Row = 0 + } else { + t.PlayPosition.Row = t.Cursor.Row + } + t.PlayPosition.Row-- + } return true case `\`: if e.Modifiers.Contain(key.ModShift) { diff --git a/tracker/tracker.go b/tracker/tracker.go index bd9093c..675c721 100644 --- a/tracker/tracker.go +++ b/tracker/tracker.go @@ -144,15 +144,10 @@ func (t *Tracker) Close() { t.closer <- struct{}{} } -func (t *Tracker) TogglePlay() { +func (t *Tracker) SetPlaying(value bool) { t.songPlayMutex.Lock() defer t.songPlayMutex.Unlock() - t.Playing = !t.Playing - if t.Playing { - t.NoteTracking = true - t.PlayPosition = t.Cursor.SongRow - t.PlayPosition.Row-- // TODO: we advance soon to make up for this -1, but this is not very elegant way to do it - } + t.Playing = value } func (t *Tracker) ChangeOctave(delta int) bool {