diff --git a/tracker/run.go b/tracker/run.go index 1df38a4..eb895fe 100644 --- a/tracker/run.go +++ b/tracker/run.go @@ -1,8 +1,6 @@ package tracker import ( - "os" - "gioui.org/app" "gioui.org/io/clipboard" "gioui.org/io/key" @@ -32,9 +30,6 @@ func (t *Tracker) Run(w *app.Window) error { } case system.FrameEvent: gtx := layout.NewContext(&ops, e) - if t.QuitButton.Clicked() { - os.Exit(0) - } t.Layout(gtx) e.Frame(gtx.Ops) } diff --git a/tracker/songpanel.go b/tracker/songpanel.go index 4a78a0e..42533b2 100644 --- a/tracker/songpanel.go +++ b/tracker/songpanel.go @@ -49,7 +49,7 @@ func (t *Tracker) layoutMenuBar(gtx C) D { gtx.Constraints.Max.Y = gtx.Px(unit.Dp(36)) gtx.Constraints.Min.Y = gtx.Px(unit.Dp(36)) - for clickedItem, hasClicked := t.FileMenu.Clicked(); hasClicked; { + for clickedItem, hasClicked := t.Menus[0].Clicked(); hasClicked; { switch clickedItem { case 0: t.LoadSong(defaultSong.Copy()) @@ -58,10 +58,10 @@ func (t *Tracker) layoutMenuBar(gtx C) D { case 2: t.SaveSongFile() } - clickedItem, hasClicked = t.FileMenu.Clicked() + clickedItem, hasClicked = t.Menus[0].Clicked() } - for clickedItem, hasClicked := t.EditMenu.Clicked(); hasClicked; { + for clickedItem, hasClicked := t.Menus[1].Clicked(); hasClicked; { switch clickedItem { case 0: t.Undo() @@ -72,9 +72,9 @@ func (t *Tracker) layoutMenuBar(gtx C) D { clipboard.WriteOp{Text: string(contents)}.Add(gtx.Ops) } case 3: - clipboard.ReadOp{Tag: t.EditMenu}.Add(gtx.Ops) + clipboard.ReadOp{Tag: &t.Menus[1]}.Add(gtx.Ops) } - clickedItem, hasClicked = t.FileMenu.Clicked() + clickedItem, hasClicked = t.Menus[1].Clicked() } shortcutKey := "Ctrl+" @@ -82,12 +82,12 @@ func (t *Tracker) layoutMenuBar(gtx C) D { shortcutKey = "Cmd+" } return layout.Flex{Axis: layout.Horizontal}.Layout(gtx, - layout.Rigid(t.layoutMenu("File", &t.MenuBar[0], t.FileMenu, unit.Dp(200), + layout.Rigid(t.layoutMenu("File", &t.MenuBar[0], &t.Menus[0], unit.Dp(200), MenuItem{IconBytes: icons.ContentClear, Text: "New Song", ShortcutText: shortcutKey + "N"}, MenuItem{IconBytes: icons.FileFolder, Text: "Open Song", ShortcutText: shortcutKey + "O"}, MenuItem{IconBytes: icons.ContentSave, Text: "Save Song", ShortcutText: shortcutKey + "S"}, )), - layout.Rigid(t.layoutMenu("Edit", &t.MenuBar[1], t.EditMenu, unit.Dp(160), + layout.Rigid(t.layoutMenu("Edit", &t.MenuBar[1], &t.Menus[1], unit.Dp(160), MenuItem{IconBytes: icons.ContentUndo, Text: "Undo", ShortcutText: shortcutKey + "Z", Disabled: len(t.undoStack) == 0}, MenuItem{IconBytes: icons.ContentRedo, Text: "Redo", ShortcutText: shortcutKey + "Y", Disabled: len(t.redoStack) == 0}, MenuItem{IconBytes: icons.ContentContentCopy, Text: "Copy", ShortcutText: shortcutKey + "C"}, diff --git a/tracker/tracker.go b/tracker/tracker.go index 675c721..203a8f5 100644 --- a/tracker/tracker.go +++ b/tracker/tracker.go @@ -26,7 +26,6 @@ const ( ) type Tracker struct { - QuitButton *widget.Clickable songPlayMutex sync.RWMutex // protects song and playing song sointu.Song Playing bool @@ -36,15 +35,12 @@ type Tracker struct { EditMode EditMode SelectionCorner SongPoint Cursor SongPoint - FileMenu *Menu - EditMenu *Menu + MenuBar []widget.Clickable + Menus []Menu CursorColumn int CurrentInstrument int CurrentUnit int CurrentParam int - UnitGroupMenuVisible bool - UnitGroupMenuIndex int - UnitSubMenuIndex int NoteTracking bool Theme *material.Theme Octave *NumberInput @@ -55,22 +51,14 @@ type Tracker struct { TrackVoices *NumberInput InstrumentNameEditor *widget.Editor NewTrackBtn *widget.Clickable - CopySongBtn *widget.Clickable - PasteBtn *widget.Clickable NewInstrumentBtn *widget.Clickable DeleteInstrumentBtn *widget.Clickable - LoadSongFileBtn *widget.Clickable - NewSongFileBtn *widget.Clickable AddSemitoneBtn *widget.Clickable SubtractSemitoneBtn *widget.Clickable AddOctaveBtn *widget.Clickable SubtractOctaveBtn *widget.Clickable SongLength *NumberInput - SaveSongFileBtn *widget.Clickable - FileMenuBtn *widget.Clickable PanicBtn *widget.Clickable - MenuBar []widget.Clickable - FileMenuVisible bool ParameterSliders []*widget.Float ParameterList *layout.List UnitDragList *DragList @@ -90,12 +78,7 @@ type Tracker struct { sequencer *Sequencer refresh chan struct{} - setPlaying chan bool - rowJump chan int - patternJump chan int audioContext sointu.AudioContext - playBuffer []float32 - closer chan struct{} undoStack []sointu.Song redoStack []sointu.Song } @@ -141,7 +124,6 @@ func clamp(a, min, max int) int { func (t *Tracker) Close() { t.audioContext.Close() - t.closer <- struct{}{} } func (t *Tracker) SetPlaying(value bool) { @@ -654,7 +636,6 @@ func (t *Tracker) Unselect() { func New(audioContext sointu.AudioContext, synthService sointu.SynthService) *Tracker { t := &Tracker{ Theme: material.NewTheme(gofont.Collection()), - QuitButton: new(widget.Clickable), audioContext: audioContext, BPM: new(NumberInput), Octave: new(NumberInput), @@ -667,12 +648,6 @@ func New(audioContext sointu.AudioContext, synthService sointu.SynthService) *Tr NewTrackBtn: new(widget.Clickable), NewInstrumentBtn: new(widget.Clickable), DeleteInstrumentBtn: new(widget.Clickable), - NewSongFileBtn: new(widget.Clickable), - CopySongBtn: new(widget.Clickable), - PasteBtn: new(widget.Clickable), - FileMenuBtn: new(widget.Clickable), - LoadSongFileBtn: new(widget.Clickable), - SaveSongFileBtn: new(widget.Clickable), AddSemitoneBtn: new(widget.Clickable), SubtractSemitoneBtn: new(widget.Clickable), AddOctaveBtn: new(widget.Clickable), @@ -681,15 +656,10 @@ func New(audioContext sointu.AudioContext, synthService sointu.SynthService) *Tr DeleteUnitBtn: new(widget.Clickable), ClearUnitBtn: new(widget.Clickable), PanicBtn: new(widget.Clickable), - FileMenu: new(Menu), - EditMenu: new(Menu), + Menus: make([]Menu, 2), MenuBar: make([]widget.Clickable, 2), UnitDragList: &DragList{List: &layout.List{Axis: layout.Vertical}}, - setPlaying: make(chan bool), - rowJump: make(chan int), - patternJump: make(chan int), refresh: make(chan struct{}, 1), // use non-blocking sends; no need to queue extra ticks if one is queued already - closer: make(chan struct{}), undoStack: []sointu.Song{}, redoStack: []sointu.Song{}, InstrumentDragList: &DragList{List: &layout.List{Axis: layout.Horizontal}},