Add list input

This commit is contained in:
Dan Jones 2023-09-05 22:05:05 -05:00
commit e0bc00d779
2 changed files with 90 additions and 9 deletions

View file

@ -8,7 +8,8 @@ import (
"os"
"codeberg.org/danjones000/strip-beats/app"
"codeberg.org/danjones000/strip-beats/input/boolean"
// "codeberg.org/danjones000/strip-beats/input/boolean"
"codeberg.org/danjones000/strip-beats/input/list"
"github.com/spf13/cobra"
)
@ -19,14 +20,28 @@ var rootCmd = &cobra.Command{
// Uncomment the following line if your bare application
// has an action associated with it:
Run: func(cmd *cobra.Command, args []string) {
out := app.PickFileWithConf()
fmt.Printf("%+v\n", out)
// media.Watch(out.Format.Path)
show := boolean.Choose("Show stream?")
if show {
stream := out.WantedAudioStream()
fmt.Printf("Stream %d of %s: %+v\n", stream.Index, out.Format.Path, stream)
}
opt := list.List([]list.Option{
list.SimpleItem("Yes", "", 'y'),
list.SimpleItem("No", "", 'n'),
list.SimpleItem("Maybe", "perhaps", 'm'),
}, nil)
fmt.Printf("%+v\n", opt)
// out := app.PickFileWithConf()
out := app.SetFile("/home/drj/nothing.mkv")
fmt.Println("first", out.Format.Path)
// tmp, _ := os.CreateTemp("", "audio.*.mka")
// defer os.Remove(tmp.Name())
// fmt.Println("temp", tmp.Name())
app.Finish()
/*
fmt.Printf("%+v\n", out)
// media.Watch(out.Format.Path)
show := boolean.Choose("Show stream?")
if show {
stream := out.WantedAudioStream()
fmt.Printf("Stream %d of %s: %+v\n", stream.Index, out.Format.Path, stream)
}
*/
},
}

66
input/list/list.go Normal file
View file

@ -0,0 +1,66 @@
package list
import "github.com/rivo/tview"
type Option interface {
Title() string
Text() string
Rune() rune
Selected() func()
}
type opt struct {
tit string
t string
r rune
}
func (o opt) Title() string {
return o.tit
}
func (o opt) Text() string {
return o.t
}
func (o opt) Rune() rune {
return o.r
}
func (o opt) Selected() func() {
return nil
}
func SimpleItem(title, text string, char rune) Option {
return opt{title, text, char}
}
func List(items []Option, cb func(*tview.List)) Option {
if len(items) == 0 {
return opt{}
}
var index int
app := tview.NewApplication()
list := tview.NewList()
for _, item := range items {
list.AddItem(item.Title(), item.Text(), item.Rune(), item.Selected())
}
list.Box.SetBorder(true) //.SetTitle(title)
if cb != nil {
cb(list)
}
list.SetSelectedFunc(func(idx int, _ string, _ string, _ rune) {
index = idx
app.Stop()
})
if err := app.SetRoot(list, false).EnableMouse(true).Run(); err != nil {
panic(err)
}
return items[index]
}