package main import ( "log" engine "git.pablu.de/pablu/sqv-engine" "github.com/gdamore/tcell/v2" "github.com/rivo/tview" ) func main() { app := tview.NewApplication() menu := tview.NewList() table := tview.NewTable().SetBorders(true) table.SetBorder(true).SetTitle("TABLE") menu.SetTitle("TABLES").SetBorder(true) menu.ShowSecondaryText(false).SetDoneFunc(func() { table.Clear() }) flex := tview.NewFlex(). AddItem(menu, 0, 1, true). AddItem(table, 0, 3, true) m, err := engine.NewManager("db.sqlite") if err != nil { log.Fatalf("Ran into an error on opening Manager, err: %v\n", err) } m.Start() tables := m.GetTables() for _, t := range tables { menu.AddItem(t.Name, "", 0, nil) } menu.SetChangedFunc(func(index int, mainText, secondaryText string, shortcut rune) { table.Clear() t, ok := m.GetTable(mainText) if !ok { panic("AHHHHHHH") } for i, c := range t.Columns { color := tcell.ColorDarkGreen table.SetCell(0, i, tview.NewTableCell(c.Name).SetTextColor(color).SetAlign(tview.AlignCenter)) } err = m.LoadTable(&t) if err != nil { panic(err) } for ri, r := range t.Rows { for rc, c := range r.Values { table.SetCell(ri+1, rc, tview.NewTableCell(c).SetTextColor(tcell.ColorWhite).SetAlign(tview.AlignCenter)) } } }) menu.SetCurrentItem(1) table.Select(0, 0).SetFixed(1, 1).SetDoneFunc(func(key tcell.Key) { switch key { case tcell.KeyEscape: app.Stop() case tcell.KeyEnter: table.SetSelectable(true, true) } }).SetSelectedFunc(func(row, column int) { table.GetCell(row, column).SetTextColor(tcell.ColorRed) table.SetSelectable(false, false) }) if err := app.SetRoot(flex, true).EnableMouse(true).Run(); err != nil { panic(err) } }