package ui import ( "bytes" "github.com/RasmusLindroth/tut/config" "github.com/rivo/tview" ) type HelpView struct { tutView *TutView shared *Shared View *tview.Flex content *tview.TextView controls *tview.Flex } type HelpData struct { Style config.Style } func NewHelpView(tv *TutView) *HelpView { content := NewTextView(tv.tut.Config) controls := NewControlView(tv.tut.Config) hv := &HelpView{ tutView: tv, shared: tv.Shared, content: content, controls: controls, } hd := HelpData{Style: tv.tut.Config.Style} var output bytes.Buffer err := tv.tut.Config.Templates.Help.ExecuteTemplate(&output, "help.tmpl", hd) if err != nil { panic(err) } hv.content.SetText(output.String()) var items []Control items = append(items, NewControl(tv.tut.Config, tv.tut.Config.Input.GlobalBack, true)) items = append(items, NewControl(tv.tut.Config, tv.tut.Config.Input.GlobalExit, true)) for i, item := range items { if i < len(items)-1 { hv.controls.AddItem(NewControlButton(hv.tutView, item), item.Len+1, 0, false) } else { hv.controls.AddItem(NewControlButton(hv.tutView, item), item.Len, 0, false) } } hv.View = newHelpViewUI(hv) return hv } func newHelpViewUI(hv *HelpView) *tview.Flex { r := tview.NewFlex().SetDirection(tview.FlexRow) if hv.tutView.tut.Config.General.TerminalTitle < 2 { r.AddItem(hv.shared.Top.View, 1, 0, false) } r.AddItem(hv.content, 0, 1, false). AddItem(hv.controls, 1, 0, false). AddItem(hv.shared.Bottom.View, 2, 0, false) return r }