diff --git a/elements/basic/list.go b/elements/basic/list.go index 8a19584..3bb4864 100644 --- a/elements/basic/list.go +++ b/elements/basic/list.go @@ -330,6 +330,14 @@ func (element *List) Replace (index int, entry ListEntry) { } } +// Select selects a specific item in the list. If the index is out of bounds, +// no items will be selecected. +func (element *List) Select (index int) { + if element.selectEntry(index) { + element.redo() + } +} + func (element *List) selectUnderMouse (x, y int) (updated bool) { inset := element.theme.Inset(theme.PatternSunken) bounds := inset.Apply(element.Bounds()) diff --git a/examples/piano/main.go b/examples/piano/main.go index 620ae6f..f84f1c3 100644 --- a/examples/piano/main.go +++ b/examples/piano/main.go @@ -36,17 +36,27 @@ func run () { controlBar := basicElements.NewContainer(basicLayouts.Horizontal { true, false }) label := basicElements.NewLabel("Play a song!", false) - waveformButton := basicElements.NewButton("Sine") - waveformButton.OnClick (func () { - waveform = (waveform + 1) % 5 - switch waveform { - case 0: waveformButton.SetText("Sine") - case 1: waveformButton.SetText("Square") - case 2: waveformButton.SetText("Saw") - case 3: waveformButton.SetText("Triangle") - case 4: waveformButton.SetText("Supersaw") - } - }) + + waveformList := basicElements.NewList ( + basicElements.NewListEntry("Sine", func(){ waveform = 0 }), + basicElements.NewListEntry("Triangle", func(){ waveform = 3 }), + basicElements.NewListEntry("Square", func(){ waveform = 1 }), + basicElements.NewListEntry("Saw", func(){ waveform = 2 }), + basicElements.NewListEntry("Supersaw", func(){ waveform = 4 }), + ) + waveformList.Select(0) + + // waveformButton := basicElements.NewButton("Sine") + // waveformButton.OnClick (func () { + // waveform = (waveform + 1) % 5 + // switch waveform { + // case 0: waveformButton.SetText("Sine") + // case 1: waveformButton.SetText("Square") + // case 2: waveformButton.SetText("Saw") + // case 3: waveformButton.SetText("Triangle") + // case 4: waveformButton.SetText("Supersaw") + // } + // }) attackSlider := basicElements.NewLerpSlider(0, 3 * time.Second, adsr.Attack, true) decaySlider := basicElements.NewLerpSlider(0, 3 * time.Second, adsr.Decay, true) @@ -73,7 +83,7 @@ func run () { window.Adopt(container) controlBar.Adopt(label, true) - controlBar.Adopt(waveformButton, false) + controlBar.Adopt(waveformList, false) controlBar.Adopt(basicElements.NewSpacer(true), false) controlBar.Adopt(attackSlider, false) controlBar.Adopt(decaySlider, false)